首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用xargs执行bash -c

用xargs执行bash -c
EN

Stack Overflow用户
提问于 2017-02-21 00:19:09
回答 2查看 303关注 0票数 0

我有份工作要做的是:

  • 日志中的grep行
  • 在行中找到一个数字
  • 对数字执行基本算法(例如,数字+ 1234)

最后的结果是由换行符分隔的一组数字。

如果输入是:

代码语言:javascript
复制
1000
2000
3000

然后,所需的输出是:

代码语言:javascript
复制
2234
3234
4234

最后,我得到了以下命令:

代码语言:javascript
复制
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,但是如果省略它,算术失败,输出的数字不变:

代码语言:javascript
复制
1000
2000
3000

有谁能解释一下为什么argsbash -c的必经之路

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-21 00:24:26

曼巴什:

如果存在-c选项,则从第一个非选项参数command_string读取命令。如果在command_string之后有参数,则将它们分配给位置参数,从$0开始。

因此,对于您的情况,'args‘是一个占位符,在$0中,使您的实际输入进入$1

您应该能够将命令更改为:

代码语言:javascript
复制
grep "word" log.txt | cut -d'|' -f7 | cut -d' ' -f5 | xargs -n 1 bash -c 'echo $(($0 + 1234))'
票数 1
EN

Stack Overflow用户

发布于 2017-02-21 00:35:49

一个简单的awk命令也可以这样做--以一种干净的方式:

代码语言:javascript
复制
awk -F'|' '/word/{split($7,a," "); print a[5]+1234}' log.txt
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42356510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档