我试图找出两个文本文件的区别。但是,第一行总是可以改变。出于这个原因,我从python中执行了这个:
tail -n +2 file1
tail -n +2 file2
然后比较我匹配输出的结果。
但是,如果可能,我想使用awk
或sed
。
到目前为止我发现的是:
awk 'NR == FNR { A[$0]=3; next } !A[$0]' file2 file1
但是从第一行开始比较。
如何从第二行进行区分?
答案 0 :(得分:4)
您可以将diff
与process substitution:
diff <(tail -n +2 file1) <(tail -n +2 file2)
答案 1 :(得分:3)
您可以编写类似
的内容awk 'NR == FNR { A[$0]=3; next } !A[$0]&&FNR>1' file2 file1
FNR>1
对于每个读取的文件,FNR
值都会重置为1
。因此FNR>1
从第二行开始选择所有行。答案 2 :(得分:2)
所有当前的AWK答案都不会显示文件之间的差异,它们只会显示一个文件是否包含来自另一个文件的行,而不考虑顺序或出现次数。
一种逐行比较的awk方式。
awk 'NR==FNR{A[FNR]=$0}FNR>1&&!(A[FNR]==$0)' file1 file2
如果要输出两条线(类似于diff(ish))
awk 'NR==FNR{A[FNR]=$0}
FNR>1&&!(A[FNR]==$0){
print "Line:",FNR"\n"ARGV[1]":"A[FNR]"\n->\n"ARGV[2]":"$0"\n"
}' file file2
第二个主要是输出的格式化。
答案 3 :(得分:1)
除nu11p01n73R解决方案外,您始终可以使用<(...)
作为输入文件:
awk 'NR == FNR { A[$0]=3; next } !A[$0]' <(tail -n+2 f2) <(tail -n+2 f1)