我有一個文件包含3列如下的字符串。提取行具有相同的第二列,但不同的第三列
a b x
a b y
a b z
a c x
a d y
我想提取具有相同的第二列但不同的第三列的所有行。我期待在上面的例子中的輸出是
a b x
a b y
a b z
我試圖uniq的-f2和排序-u -k2,但它不工作,我期望的那樣。任何建議請。
我有一個文件包含3列如下的字符串。提取行具有相同的第二列,但不同的第三列
a b x
a b y
a b z
a c x
a d y
我想提取具有相同的第二列但不同的第三列的所有行。我期待在上面的例子中的輸出是
a b x
a b y
a b z
我試圖uniq的-f2和排序-u -k2,但它不工作,我期望的那樣。任何建議請。
awk
來救援!
Need to make sure all records are unique first
$ sort file | uniq |
awk '{c[$2]++; a[$2]=a[$2]?a[$2]RS$0:$0}
END{for(k in a) if(c[k]>1) print a[k]}'
a b x
a b y
a b z
說明:保持第二場出現在櫃檯聚集的記錄。最後打印計數器大於1的記錄。
awk '
seen[$2]++ {
if (!seen[$2,$3]++) {
printf "%s%s\n", first[$2], $0
}
delete first[$2]
next
}
{ first[$2] = $0 ORS }
' file
a b x
a b y
a b z
注意的是,以上在任何AWK工作,在您的輸入文件中的任何值,不保留全部在內存中輸入文件的,不依賴於前/後處理任何外部工具,並將按照輸入行中出現的順序產生輸出行。
嗨@EdMorton你能解釋一下你在腳本中做了什麼。它不適用於下面的幾個例子'c'74 _-_'75 '74 -'75 b'74 _-_'75 '74 -'75 a'74 _-_'75'74 -'75' Even @卡拉克的解決方案沒有給出預期的結果。你能否建議哪裏可以是錯誤。 – shalini
我無法分辨您想要在評論中顯示的內容。如果您有示例輸入,腳本不會產生預期的輸出,然後編輯您的問題以顯示它,請不要嘗試在註釋中包含格式化文本(代碼,輸入,輸出)。確保你確實顯示了預期的輸出,但不僅僅是輸入。 –
如果$ 2包含一個值爲零(或爲空)的值,則會失敗。您需要測試''2,而不是'a [$ 2]'。由於三元表達式不完善,您在某些awk中也可能會出現語法錯誤。最後 - 只需使用'sort -u'而不是'sort | uniq'。 –