幾年來,我經常需要將(排序的)文本行與匹配的第一個字段組合起來,並且我從來沒有找到一種優雅的(即單行unix命令行)做到這一點。我想要的與unix join
命令的可能性類似,但join
需要2個文件,每個鍵最多顯示一次。我想從一個文件開始,其中一個密鑰可能會出現多個圖塊。結合具有匹配第一個字段的行
我有一個ruby和perl腳本來做到這一點,但沒有辦法將我的算法縮短爲一行。經過多年的unix使用,我仍在學習comm
,paste
,uniq
等新的技巧,我懷疑有一個聰明的方法來做到這一點。
還有一些相關的問題,如join all lines that have the same first column to the same line; Command line to match lines with matching first field (sed, awk, etc.);和Combine lines with matching keys - 但這些解決方案從來沒有真正提供一個乾淨和可靠的解決方案。
這裏的樣本輸入:
apple:A fruit
apple:Type of: pie
banana:tropical fruit
cherry:small burgundy fruit
cherry:1 for me to eat
cherry:bright red
這裏的示例輸出:
apple:A fruit;Type of: pie
banana:tropical fruit
cherry:small burgundy fruit;1 for me to eat;bright red
這裏是我理想中的語法:
merge --inputDelimiter=":" --outputDelimiter=";" --matchfield=1 infile.txt
的 「matchfield」 實在是可選的。它可能永遠是第一個領域。分隔符的後續顯示應該像純文本一樣對待。
我不介意perl,ruby,awk單行程,如果你能想到一個簡短而優雅的算法。這應該能夠處理數百萬行的輸入。有任何想法嗎?
感謝@RomanPerekhrest,工作。比過去我嘗試過的其他awk解決方案要好得多,這些解決方案會在複雜的線路上突破。也就是說,我仍然喜歡用簡單的語法來縮短命令,但我很樂意擁有一行代碼。 – MichaelD