両方のファイルの内容は次のとおりです。
Judi # cat File1
judi /export/home 76
judi /usr 83
judi # cat File2
judi /export/home 79
judi /usr 82
の3番目の列がFile2
3番目の列より大きい場合、行をFile1
印刷します。File2
ジュディ/出口/Home79
答え1
awk 'NR==FNR{a[$1$2]=$3;next}$3>a[$1$2]&&a[$1$2]{print $0}' file1 file2
まずfile1
、配列を読み取り、a
配列を3番目の列で埋め、最初と2番目の列にインデックスを付けます。後での3番目の値とfile2
比較して大きい場合、a
行全体が印刷されます。
答え2
IFS='
'
for line in $(cat file1); do
path=$(echo $line|cut -d' ' -f2)
value1=$(echo $line|cut -d' ' -f3)
value2=$(grep " $path " file2|cut -d' ' -f3)
if [[ "$(echo \"$value2>$value1\"|bc)" == "1" ]]; then
grep " $path " file2;
fi
done
答え3
行の場合はいpaste
同じ順序で処理する前にファイルをマージするよりきれいなソリューションがあります。このコマンドは、paste file1 file2
次のように合計の対応する行をマージします。file1
file2
$ cat file1
judi /export/home 76
judi /usr 83
$ cat file2
judi /export/home 79
judi /usr 82
$ paste file1 file2
judi /export/home 76 judi /export/home 79
judi /usr 83 judi /usr 82
その後、次のようにパイプラインで使用できますawk
。
$ paste file1 file2 | awk '$6 > $3 {print $4, $5, $6}'
judi /export/home 79
もちろん(あなたの場合のように)行の順序が異なる場合は機能しませんが、「awkを使用して2つのファイルの列値を比較する」というタイトルの質問に答えます。