2つのテキストファイルがあり、行と列に基づいてその値を比較したいと思います。比較すると、値が等しいことを確認し、値が等しいかエコーすることを意味します。ファイルは次のようになります。
file1.txt
Name Col1 Col2 Col3
-----------------------
row1 1 4 7
row2 2 5 8
row3 3 6 9
file2.txt
Name Col1 Col2 Col3
-----------------------
row2 1 4 11
row1 2 5 12
制限事項は次のとおりです。
- 存在する行のみを比較します。つまり、row3はfile1.txtにありますが、file2.txtにはないため、比較は不要です。
- 使用すべきAWK
- ファイルの行が順序ではない可能性があります。
- 私のAWKバージョンがサポートしていないので、二重配列はありません。
私は次のことを考えています:
awk 'NR>2 {next}
{
for (i=2;i<NR;i++) #For each row of file1.txt
{
for(j=1;i<NF;j++) #For each column of file1.txt
{
// Check if row and column of file1.txt is equal to row and column of file2.txt.
}
}
}
' file1.txt file2.txt
2つの異なるテキストファイルの値を比較するには?さらに説明が必要な場合はお知らせください。
私が求めているのは、AWKの共通構成を使用することだけです。残りは把握できることを願っています。
ベストアンサー1
これにより、両方のファイルに名前が存在しますが、値が異なるfile2の行が出力されます。
awk 'NR==FNR {f1[$1]=$0; next} $1 in f1 && $0 != f1[$1]' file1.txt file2.txt
row2 1 4 11
row1 2 5 12
空白の違いでさえ、間違った結果をもたらす可能性があることに気づきました。次の行を「正規化」できます。
awk '
NR==FNR {$1=$1; f1[$1]=$0; next}
$1 in f1 {$1=$1; if ($0 != f1[$1]) print}
' file1.txt file2.txt
row2 1 4 11
row1 2 5 12