我需要在同一行中使用xargs(1)和bc(1)的帮助。我可以做多行,但是我真的很想在一行中找到一个解决方案。

这是问题所在:下一行将打印file.txt的大小

ls -l file.txt | cut -d" " -f5

并且,以下行将打印1450(显然是1500-50)
echo '1500-50' | bc

尝试将这两个加在一起,我这样做:
ls -l file.txt | cut -d" " -f5 | xargs -0 -I {} echo '{}-50' | bc

问题是,它不起作用! :)

我知道xargs可能不是正确使用的命令,但这是我可以找到的唯一命令,谁可以让我决定将从管道中获取的参数放在哪里。

这不是我第一次遇到这种问题。这会很有帮助。

谢谢

最佳答案

如果你这样做

ls -l file.txt | cut -d" " -f5 | xargs -0 -I {} echo '{}-50'

您将看到以下输出:
23
-50

这意味着bc没有看到完整的表达式。

只需使用-n 1而不是-0:
ls -l file.txt | cut -d" " -f5 | xargs -n 1 -I {} echo '{}-50'

你得到
23-50

哪个bc会愉快地处理:
ls -l file.txt | cut -d" " -f5 | xargs -n 1 -I {} echo '{}-50' | bc
-27

因此,您的基本问题是,-0不期望行,而\0终止的字符串。因此,管道中先前命令的换行符会使bc的表达困惑。

10-07 19:46
查看更多