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

如何使用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

我是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){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,当两个文件包含相同数量的行时,不是吗?