如何使用Awk比较两个文件的行数

时间:2015-02-11 10:42:43

标签: awk text-processing line-count

我是awk的新手,需要比较两个文件的行数。 脚本应返回true,

if lines(f1) == (lines(f2)+1)

否则为假。我怎么能这样做?

祝你好运

2 个答案:

答案 0 :(得分:3)

如果必须是awk

awk 'NR==FNR{x++} END{ if(x!=FNR){exit 1} }' file1 file2

变量x递增,包含file1行数,FNR包含file2数。最后,两者都进行了比较,脚本退出0或1。

查看示例:

user@host:~$ awk 'NR==FNR{x++} END{ if(x!=FNR){exit 1} }' shortfile longfile
user@host:~$ echo $?
1
user@host:~$ awk 'NR==FNR{x++} END{ if(x!=FNR){exit 1} }' samefile samefile
user@host:~$ echo $?
0

答案 1 :(得分:0)

这样的事情应该适合你的目的:

 [ oele3110 $] cat line_compare.awk
#!/usr/bin/gawk -f

NR==FNR{
    n_file1++;
}
NR!=FNR{
    n_file2++;
}

END{
    n_file2++;
    if(n_file1==n_file2){exit(1);}
}
 [ oele3110 $] cat f1
1
1
1
1
1
1
 [ oele3110 $] cat f2
1
1
1
1
1
 [ oele3110 $] cat f3
1
1
1
1
1
 [ oele3110 $]
 [ oele3110 $] wc -l f*
 6 f1
 5 f2
 5 f3
16 total
 [ oele3110 $] ./line_compare.awk f1 f2
 [ oele3110 $] echo $?
1
 [ oele3110 $] ./line_compare.awk  f2 f3
 [ oele3110 $] echo $?
0
 [ oele3110 $]

实际上,我认为在给你答案之前,我应该要求你投入更多的精力。我现在就离开它,但下次我不会犯同样的错误。