Awk
將以下部分行合併到 3 列文件中的目前行
我
word @@@ type @@@ sentence
在每一行都有一個格式的文本文件,按“單詞”升序排序。然而,有些行並不是唯一的,它們以與前一行相同的單詞開頭,即見下面的 word1:... word0 @@@ type2 @@@ sentence0 word1 @@@ type1 @@@ sentence1 word1 @@@ type1 @@@ sentence2 word1 @@@ type1 @@@ sentence3 word1 @@@ type2 @@@ sentence4 word2 @@@ type1 @@@ sentence5 ...
我想通過附加句子將具有相同單詞和類型組合的行合併為一個,因此文件結果為:
... word0 @@@ type2 @@@ sentence0 word1 @@@ type1 @@@ sentence1 ;;; sentence2 ;;; sentence3 word1 @@@ type2 @@@ sentence4 word2 @@@ type1 @@@ sentence5 ...
word 和 type 欄位沒有空格。
假設您的輸入在您發布的範例輸入中顯示在
word
和欄位上進行排序:type
$ cat tst.awk BEGIN { FS=" @@@ "; ORS="" } { curr = $1 FS $2 } curr != prev { printf "%s%s", ORS, $0 prev = curr ORS = RS next } { printf " ;;; %s", $NF } END { print "" } $ awk -f tst.awk file word0 @@@ type2 @@@ sentence0 word1 @@@ type1 @@@ sentence1 ;;; sentence2 ;;; sentence3 word1 @@@ type2 @@@ sentence4 word2 @@@ type1 @@@ sentence5
以上將在每個 UNIX 機器上的任何 shell 中使用任何 awk 工作,一次僅在記憶體中儲存 1 行,並且將以與輸入相同的順序產生輸出。