【问题标题】:xargs and grep in bash scriptbash 脚本中的 xargs 和 grep
【发布时间】:2015-09-22 09:48:27
【问题描述】:

我有一个脚本,它获取单词列表并在文件中搜索它们。我使用 xargs 获取列表中的单词并将它们传递给 grep。

awk 'BEGIN { FS = ","; } { print $9 }' $file | xargs -I {} grep -w {} $second_file

第一个 awk 命令搜索 $file 中的第 9 列。它会生成约 50 个名称的列表,例如 YHOO、AAPL、LB 等(股票代码符号)。然后我使用 xargs 将结果传递给 grep 并搜索唯一的匹配项。

问题是 grep 有时会返回正确的股票代码和其他附加了 .# 的符号。

例如:

LB
LB.1

将由上述命令返回。

执行搜索的文件(上面的$second_file)如下所示

2006-09-30      006733  LB      501797104       25504010        10      26.490000       2006-09-30      28.940000       2006-12-31      0.092488

在终端,我可以输入

grep  '\sLB\s'   $second_file

它只返回 LB 而不是 LB.1,这正是我想要的。

如何使用 xargs 在脚本中复制“\sLB\s”?如果我写

grep '\s{}\s'

在我的脚本中它不起作用,所有结果都是空的。

谢谢!

【问题讨论】:

    标签: bash awk grep xargs


    【解决方案1】:

    为什么不把它保存在一个 awk 命令中呢?到目前为止,您告诉我们的只是:

    awk 'NR==FNR{ticks[$9]; next} $3 in ticks' FS="," "$file" FS=" " "$second_file"
    

    如果这不能满足您的要求,请编辑您的问题以阐明您的要求并提供更具代表性的输入/输出。

    【讨论】:

    • 成功了!我应该更清楚。我的问题是:如果在命令行中输入grep '\sLB\s' $file,我如何使用xargs 在bash 脚本中复制它,其中LB 将是通过{} 传递的参数
    • 打败我,我永远不会像那样使用 xargs。
    猜你喜欢
    • 2023-03-30
    • 2013-05-30
    • 1970-01-01
    • 2018-10-14
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多