我需要在同一行中使用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的表达困惑。