一行代码判断两个文件的第一行是否相同

一行代码判断两个文件的第一行是否相同

是否可以简单使用 head 和 cmp(或其他方式)来实现这一点?

答案1

diff您可以使用进程替换的退出状态head

[kbrandt@localhost ~]$ echo arf > foo
[kbrandt@localhost ~]$ echo arf > foo1
[kbrandt@localhost ~]$ diff <(head -n1 foo) <(head -n1 foo1)
[kbrandt@localhost ~]$ echo $?
0
[kbrandt@localhost ~]$ echo foo > foo1
[kbrandt@localhost ~]$ diff <(head -n1 foo) <(head -n1 foo1)
1c1
< arf
---
> foo
[kbrandt@localhost ~]$ echo $?
1
[kbrandt@localhost ~]$ 

Diff 比较文件,如果退出状态为零,则文件匹配。非零表示它们不匹配,或者运行 diff 时出现错误,这似乎不太可能。是一个 shell 变量,它具有前一个命令的退出状态。如果您不想在屏幕上看到$?diff 的输出,可以通过在 diff 命令末尾添加以下内容来重定向 diff 的输出:> /dev/null

[kbrandt@localhost ~]$ diff <(head -n1 foo) <(head -n1 foo1) > /dev/null
[kbrandt@localhost ~]$ echo $?
1

答案2

以下是在 Bash 中执行此操作的一种方法,无需调用三次外部实用程序。它也适用于没有进程替换的 POSIX shell:

read a<file1; read b<file2; [ "$a" = "$b" ]; echo $?

以下是使用 AWK 的另一种方法:

awk 'FNR==1{a[NR]=$0; if (NR==2) exit a[1]!=a[2]; nextfile}' file1 file2

请注意,AWK 比较返回 1 表示真,因此我使用!=0,这样 shell 就会得到它认为是真的。

相关内容