如何使用Awk比较两个文件的行数
我是awk新手,需要比较两个文件的行数。 脚本将返回true如何使用Awk比较两个文件的行数,awk,text-processing,line-count,Awk,Text Processing,Line Count,我是awk新手,需要比较两个文件的行数。 脚本将返回true 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){ex
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 $]
事实上,我想在给你答案之前,我应该让你付出更多的努力。我暂时不谈了,但下次我不会再犯同样的错误。这样的事情应该适合你的目的:
[ 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 $]
事实上,我想在给你答案之前,我应该让你付出更多的努力。我暂时不谈了,但下次我不会再犯同样的错误。这样的事情应该适合你的目的:
[ 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 $]
事实上,我想在给你答案之前,我应该让你付出更多的努力。我暂时不谈了,但下次我不会再犯同样的错误。这样的事情应该适合你的目的:
[ 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
:
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
:
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
:
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
通常您会使用
wc-l
来计算文件中的行数。。。如果不能做到这一点,请查看Ed的答案,了解如何正常处理2个文件。您可以使用wc-l
来计算文件中的行数。。。如果不能做到这一点,请查看Ed的答案,了解如何正常处理2个文件。您可以使用wc-l
来计算文件中的行数。。。如果不能做到这一点,请查看Ed的答案,了解如何正常处理2个文件。您可以使用wc-l
来计算文件中的行数。。。如果做不到这一点,请看一下Ed的答案,看看如何处理2个文件:-)非常简洁-请投票。实际上,awk
将以状态0自然退出,因此如果您反转逻辑并以状态1退出,您可以忽略exit 0
。您甚至可以只执行END{exit(x!=FNR)}
,但这可能变得太模糊了。我认为所需的功能是在一个文件比另一个文件多包含一行时返回1,当两个文件包含相同的行数时,不是吗?:-)非常简洁-请投票。实际上,awk
将以状态0自然退出,因此如果您反转逻辑并以状态1退出,您可以忽略exit 0
。您甚至可以只执行END{exit(x!=FNR)}
,但这可能变得太模糊了。我认为所需的功能是在一个文件比另一个文件多包含一行时返回1,当两个文件包含相同的行数时,不是吗?:-)非常简洁-请投票。实际上,awk
将以状态0自然退出,因此如果您反转逻辑并以状态1退出,您可以忽略exit 0
。您甚至可以只执行END{exit(x!=FNR)}
,但这可能变得太模糊了。我认为所需的功能是在一个文件比另一个文件多包含一行时返回1,当两个文件包含相同的行数时,不是吗?:-)非常简洁-请投票。实际上,awk
将以状态0自然退出,因此如果您反转逻辑并以状态1退出,您可以忽略exit 0
。您甚至可以只执行END{exit(x!=FNR)}
,但这可能变得太模糊了。我认为所需的功能是在一个文件比另一个文件多包含一行时返回1,当两个文件包含相同数量的行时,不是吗?