awkを使用した2行の比較

awkを使用した2行の比較

入力する

aaaaa|bbbbb|ccccc|ddddd|5|5|4
aaaaa|bbbbb|ccccc|ddddd|10|10|1
wwwww|xxxxx|yyyyy|zzzzz|5|5|2
wwwww|xxxxx|yyyyy|zzzzz|10|10|2

出力

aaaaa|bbbbb|ccccc|ddddd|5|5|
wwwww|xxxxx|yyyyy|zzzzz|10|10|

索引付けに使用されるものは次のとおりです。

列1〜4(例:aaaaa | bbbbb | ccccc | ddddd)

出力ロジックは次のとおりです。

  1. 同じインデックスを持つレコードの最後の列を比較して、最後の列の値が高いレコードが出力に印刷されます。

  2. 最後の列の同じインデックスを持つレコードを比較して等しい場合、5列と6列の値が大きいレコードを出力します。

ベストアンサー1

sort単にingを使用して各グループの最初の項目を選択するだけです。

sort filename -t'|' -k1,4 -k7rn -k5,6rn | sort -t'|' -k1,4 -u

結果:

aaaaa|bbbbb|ccccc|ddddd|5|5|4
wwwww|xxxxx|yyyyy|zzzzz|10|10|2

これは何のためであるか。

  • -t'|'フィールド区切り記号を次のように設定します。|
  • -k1,4最初の4つのフィールドに基づいてソート
  • -k7rn次に、7番目のフィールドで逆方向と数値比較を実行します。
  • -k5,6rnそれでは五番目、六番目のゲームも同じだ。
  • |他のタイプに渡す
  • -k1,4 -u -u最初の4つのフィールドの一意性を示します。

したがって、全体の操作は、目的の行が最初の4つのフィールドグループに最初に表示されるように、必要な方法でファイルを並べ替えることと同じです。次に、各グループの最初の行を取得します。

おすすめ記事