为目录中的多个文件设置阈值

时间:2017-02-28 18:41:07

标签: awk sed

我有一个目录中的文件列表。例如,下面的文件是显示第一行的每个文件的名称(每个文件中有几个其他行并不重要)。

组别1

8 325
quick brown fox jumped
Over the lazy dog

组2

8 560
There is more content here

第3组

7 650

我想读取每个文件的第一行并检查第一个值是否等于8,第二个值是否大于500.如果满足此条件,则将文件名称打印到新的文本文件中。

结果

Group2  

我尝试使用

for f in *.Group; 
do head -n1 *.Group > new-file;
done 

这给了我一个带有标题名称的文件和目录

中每个文件的第一行
=> Group1 <=
8 325

=> Group2 <=
8 560

=> Group3 <=
7 650

现在,我想根据阈值过滤文件,但不确定如何将所有标题转换为第一列,将相应的值转换为第二列。然后很容易应用阈值并过滤文件。或者有更好的方法吗?

1 个答案:

答案 0 :(得分:4)

您可以使用awk

awk 'FNR==1 && $1==8 && $2>500{print FILENAME}' *.Group > Result

说明:

# FNR contains the number of line of the current(!) input
# file. Check if the conditions are met and print the filename
FNR==1 && $1==8 && $2>500 {
    print FILENAME
}

上述解决方案适用于任何版本的awk。如果你有GNU awk,你可以利用nextfile表达式。使用它,您可以在处理完第一行后跳过输入文件的剩余行:

# Check if the conditions are met and print the filename in that case
$1==8 && $2>500 {
    print FILENAME
}

# Skip the remaining lines in the current file and continue
# with the next file
{
    nextfile
}