首页 > 解决方案 > 如何将 awk 命令应用于一定数量的文件?

问题描述

我有 X 个文件,我有这个命令:

awk ' /'$awk_value'/ {split(FILENAME,a,"-");print a[2]"-"a[3]"-"a[4]","$2","$3}' /xxx/xxx/all_my_files > /xxx/xxx/xxx/TEST.txt

但例如,如果我有 120 个文件……我怎样才能将此命令应用于仅最后七个文件?

标签: linuxawk

解决方案


您可以使用该tail命令,然后使用xargs将输出用作参数列表。

ls /xxx/xxx/my_files*.txt | tail -7 | 
    xargs awk -v awk_value="$awk_value" '$0 ~ awk_value {split(FILENAME,a,"-");print a[2]"-"a[3]"-"a[4]","$2","$3}' > /xxx/xxx/xxx/TEST.txt

这假设“最后 7 个”基于ls命令可以生成的顺序(例如,按文件名排序,按修改时间排序)。

还要注意-v将 shell 变量转换为awk变量的选项的使用,而不是连接它的方法(如果包含空格,这将不起作用$awk_value——您应该始终用双引号括起变量以防止这种情况发生)。


推荐阅读