排序文件,然后将其传递给awk进行搜索

时间:2019-11-23 21:57:29

标签: bash awk

我想搜索文件列表并获取结果列表。为此,我有:

awk 'tolower($0) ~ /hauerwas/' RS= ORS="\\n\\n**********************\\n\\n" *

效果很好,只是结果顺序错误。我希望从顶部的新 FILES 中获得结果。不对结果排序,而是对文件排序然后搜索它们。

因此,我尝试通过按我想要的方式排序的“ ls”命令创建变量,然后在变量中的每个文件上运行awk。这就是我所拥有的:

theFile=`ls -r`; for file in "$theFile"; do awk 'tolower($0) ~ /hauerwas/' "$file"; done

不起作用。只是吐在文件列表上。

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:2)

您可以这样做(假设使用GNU工具,并假设您的文件名都不包含换行符)

mapfile -t sortedByMtimeDesc < <(stat -c '%Y %n' * | sort -nr | cut -d " " -f 2-)
awk ... "${sortedByMtimeDesc[@]}"

答案 1 :(得分:2)

  

for file in "$theFile"

如果您知道文件名中没有空格,则引号会阻止单词分割;请不要使用空格;否则,您会使用类似的东西

find -type f -exec ls -t {} + \
| xargs -d\\n awk 'tolower($0)~/hauerwas/' RS= ORS=$'\n\n**********************\n\n'
相关问题