Text-Processing

使用 awk 比較 2 行

  • February 17, 2017

輸入

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 列的值較大的記錄列印到輸出。

您可以簡單地使用sorting 相應地執行此操作,然後為每個組選擇第一個條目。

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然後通過反向和數字比較的第七個欄位
  • -k5,6rn然後與第五和第六場相同
  • |將其傳遞給另一種類型
  • -k1,4 -u -u表示前 4 個欄位的唯一性

所以整個操作就像按照你的意願對文件進行排序,以便你想要的行首先顯示在前 4 個欄位的組中。然後只需抓住每組的第一行。

引用自:https://unix.stackexchange.com/questions/344851