這應該是相當簡單的(希望)使用awk,但我找不到解決方案。 我有一個檔案,我想對每一行進行比較,如果第1列和第2列的字串組合在任何其他行中重復,我想只列印第一個匹配:
cat file.csv
alpha_3,alpha_47,100,60,0,0,1,60,1,60,8.21E-29,111
alpha_47,alpha_3,100,60,0,0,1,60,1,60,8.21E-29,111
beta_86,beta_12,100,61,0,0,1,61,1,61,2.33E-29,113
beta_86,beta_14,100,61,0,0,1,61,1,61,2.33E-29,113
beta_12,beta_14,100,61,0,0,1,61,1,61,2.33E-29,113
beta_14,beta_12,100,61,0,0,1,61,1,61,2.33E-29,113
#命令
這似乎是在作業,但我必須提取前兩列。
而且我不能列印匹配的第一個實體
awk -F "," '{print $1 , $2}' file.csv | awk -F' ' '!see[$2 FS $1]; {seen[$0] }'
alpha_3 alpha_47
beta_86 beta_12
β_86 β_14
β_12 β_14
但它沒有列印整行,如果我嘗試不選擇前兩列,它也不起作用。
#期望的輸出
alpha_3,alpha_47,100,60,0,0,1,60,1,60,8.21E-29,111
beta_86,beta_12,100,61,0,0,1,61,1,61,2.33E-29,113
beta_86,beta_14,100,61,0,0,1,61,1,61,2.33E-29,113
beta_12,beta_14,100,61,0,0,1,61,1,61,2.33E-29,113
我正在學習awk(仍然),所以如果有人能提供一個解決方案并解釋他們的代碼,那就更好了!
uj5u.com熱心網友回復:
當想要比較復合值而不考慮其順序時,一般的解決方案是對用于創建陣列索引的鍵進行排序。如果只有2個鍵,那就只需要比較它們,并且不管它們的輸入順序如何,總是以相同的順序連接它們(例如,最大的在前):
$ awk -F, '!see[$1>$2 ? $1 FS $2 : $2 FS $1] ' file.csv
alpha_3,alpha_47,100,60,0,0,1,60,1,60,8.21E-29,111
beta_86,beta_12,100,61,0,0,1,61,1,61,2.33E-29,113
beta_86,beta_14,100,61,0,0,1,61,1,61,2.33E-29,113
beta_12,beta_14,100,61,0,0,1,61,1,61,2.33E-29,113
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/318116.html
標籤:
