awkを使用して2つのファイルの列値を比較します。

awkを使用して2つのファイルの列値を比較します。

両方のファイルの内容は次のとおりです。

Judi # cat File1  
judi /export/home 76  
judi /usr 83  

judi # cat File2  
judi /export/home 79  
judi /usr 82  

の3番目の列がFile23番目の列より大きい場合、行を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次のように合計の対応する行をマージします。file1file2

$ 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つのファイルの列値を比較する」というタイトルの質問に答えます。

関連情報