我有份工作要做的是:
最后的结果是由换行符分隔的一组数字。
如果输入是:
1000
2000
3000然后,所需的输出是:
2234
3234
4234最后,我得到了以下命令:
cat log.txt | grep "word" | cut -d'|' -f7 | cut -d' ' -f5 | xargs -n 1 bash -c 'echo $(($1 + 1234))' args我在对xargs -n 1 bash -c 'echo $(($1 + 1234))' args的回答中找到了this question片段,但我不理解传入的最终args参数的必要性。我可以将它更改为任何东西,args可以是blah,但是如果省略它,算术失败,输出的数字不变:
1000
2000
3000有谁能解释一下为什么args是bash -c的必经之路
发布于 2017-02-21 00:24:26
曼巴什:
如果存在-c选项,则从第一个非选项参数command_string读取命令。如果在command_string之后有参数,则将它们分配给位置参数,从$0开始。
因此,对于您的情况,'args‘是一个占位符,在$0中,使您的实际输入进入$1。
您应该能够将命令更改为:
grep "word" log.txt | cut -d'|' -f7 | cut -d' ' -f5 | xargs -n 1 bash -c 'echo $(($0 + 1234))'发布于 2017-02-21 00:35:49
一个简单的awk命令也可以这样做--以一种干净的方式:
awk -F'|' '/word/{split($7,a," "); print a[5]+1234}' log.txthttps://stackoverflow.com/questions/42356510
复制相似问题