同じ列にある2つの類似ファイルを比較したいと思います。これらのファイルには同じヘッダーがあります。
file1.txt
mem_id Date Time Building
aa bb cc dd
ee ff gg hh
ii jj kk ll
file2.txt
mem_id Date Time Building
aa bb cc dd
ee ff 2g hh
ii jj kk 2l
Command
awk 'NR==FNR{for(i=1;i<=NF;i++){A[i,NR]=$i}next} {for(i=1;i<=NF;i++){if(A[i,FNR]!=$i)\
{print "ID#-"$1": Column",i"- File1.txt value=",A[i,FNR]" / File2.txt value= "$i}}}'\
file1.txt file2.txt
Current Output
ID#-ee: Column 3- File1.txt value= gg / File2.txt value= 2g
ID#-ii: Column 4- File1.txt value= ll / File2.txt value= 2l
Desired Output
mem_id#-ee: Time- file1.txt value= gg / file2.txt value= 2g
mem_id#-ii: Building- file1.txt value= ll / file2.txt value= 2l
私は非常に近いです。しかし、改善に役立つことを願っています。
1-「列3」と「列4」を実際の列ヘッダー(時間、建物など)に変更したいと思います。
2 - コマンドの一部としてファイル名を追加せずに出力からファイル名を動的に収集したい(汎用にするため)
3-このスクリプトを可能にしたいです。
どんな助けでも大変感謝します。
ベストアンサー1
使用awk
:
awk '
NR==1 {
for (i=1; i<=NF; i++)
header[i] = $i
}
NR==FNR {
for (i=1; i<=NF; i++) {
A[i,NR] = $i
}
next
}
{
for (i=1; i<=NF; i++)
if (A[i,FNR] != $i)
print "ID#-" $1 ": " header[i] "- " ARGV[1] " value= ", A[i,FNR]" / " ARGV[2] " value= "$i
}' file1.txt file2.txt
出力:
ID#-ee: Time- file1.txt value= gg / file2.txt value= 2g
ID#-ii: Building- file1.txt value= ll / file2.txt value= 2l