我有一千个文件,我需要验证它们在第二列中是否都具有完全相同的信息(最多一定行数)。下面是一个例子。如果文件 file1.txt 和 file2.txt 第二列的前 5 行不相等,我想打印文件的名称。在这种情况下,结果应显示:“文件 file1.txt 和 file2.txt 之间的差异”
文件1.txt
jose 50
maria 50
fernando 50
andres 50
martin 30
pablo 30
.
.
.
文件2.txt
julia 50
julio 50
alan 50
ruth 50
ana 40
manuel 40
.
.
.
答案1
唔。我想我会对文件进行 for 循环,然后与comm
.
/tmp ❯ comm -3 <(cat file1.txt|awk '{print $2}') <(cat file2.txt|awk '{print $2}') ⏎
30
30
40
40
请注意,30 和 40 是从文件中输出的。的一些基本用法comm
:
comm -1 -3 <(sort -u FILE1.txt) <(sort -u FILE2.txt)
- -1 抑制 FILE1 特有的行
- -2 抑制 FILE2 特有的行
- -3 抑制出现在两个文件中的行
因此,将所有这些放在一起,例如:
cd /path/to/files && find . -type f -name "*.txt" | while read filename
do
echo "*** Checking $filename ***"; comm -3 <(cat reference.txt|awk '{print $2}') <(cat $filename|awk '{print $2}'); echo "";
done