如何使用 Awk 比较两个文件的行数
How to compare number of lines of two files using Awk
我是awk新手,需要比较两个文件的行数。
该脚本应 return 为真,
if lines(f1) == (lines(f2)+1)
否则为假。我该怎么做?
此致
像这样的东西应该适合你的目的:
[ 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 $]
其实我觉得我应该让你多花点功夫才给你答案的。暂时先放着吧,下次我不会再犯同样的错误了。
如果必须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
我是awk新手,需要比较两个文件的行数。 该脚本应 return 为真,
if lines(f1) == (lines(f2)+1)
否则为假。我该怎么做?
此致
像这样的东西应该适合你的目的:
[ 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 $]
其实我觉得我应该让你多花点功夫才给你答案的。暂时先放着吧,下次我不会再犯同样的错误了。
如果必须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