【问题标题】:take contents of a file and search those in all the files in a particular directory in unix获取文件的内容并在 unix 的特定目录中的所有文件中搜索这些内容
【发布时间】:2014-08-13 08:33:05
【问题描述】:

假设我有一个名为 result 的文件,其内容如下:-

column_a column_b column_c
888888   854254   412589
777777   458754   863324

我想在这个特定目录的所有文本文件中只搜索 column_a 和 column_b 的内容。假设这个目录包含 100 个文本文件。我想在所有目录中搜索结果文件的 column_a 和 column_b 并将它们打印在屏幕上,并带有特定字符串所在的文件的名称。

像 888888 存在于 file1 file4 file77 out of 100 个文件中。

【问题讨论】:

  • 你能发布一个文件样本和所需的输出吗?你试过什么了 ?按照我的理解,听起来可以通过简单的grep 来处理 pwd 中的所有文件
  • 在此处粘贴您的代码 sn-p,人们会帮助您进一步改进它

标签: linux bash shell unix scripting


【解决方案1】:

使用findawk

find dir -type f -maxdepth 1 -mindepth 1 -print0 | xargs -0 -d '\n' -- \
    awk -v s='888888' '$1 == s || $2 == s { printf "%s is in %s.\n", s, FILENAME; nextfile }'

-maxdepth 1-mindepth 1 是可选的。

nextfile 是 GNU awk 的扩展。如果你没有使用 GNU awk,你可以这样做:

    awk -v s='888888' '($1 == s || $2 == s) && !a[FILENAME]++ { printf "%s is in %s.\n", s, FILENAME }'

【讨论】:

    【解决方案2】:

    首先,修改结果文件,使其更可用:

    awk 'NR>1{printf "%s\n%s\n", $1, $2}' result > tmp
    

    然后使用 grep 查找匹配的文件:

    grep -w -l -f tmp *
    

    【讨论】:

      猜你喜欢
      • 2012-07-12
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      相关资源
      最近更新 更多