Sort
在幾列上排序 -u (或 sort | uniq),但將資訊保留在第三列中,並將其附加到保留的行?
我正在嘗試使用這樣的表格:
a b hello a b goodbye g g test a c I say
將表格折疊到第 1 列和第 2 列上的每個唯一條目一行,但不會失去第 3 列中的任何資訊。第 3 列中的值可以作為逗號分隔列表附加。結果將如下所示:
a b hello, goodbye a c I say g g test
我不知道從哪裡開始。使用
sort -k1,1 -k2,2 -u
,我得到以下結果:a b hello a c I say g g test
我失去了“再見”的條目,但我想保留它。有誰知道如何避免丟棄第 3 列中的數據,如上例所示?
我不知道
sort
單獨使用的方法,但是您可以使用 awk 例如“折疊”這些值,然後排序:$ awk -F'\t' ' BEGIN{OFS=FS} {k = $1 FS $2} {a[k] = a[k] == "" ? $3 : a[k] "," $3} END{for (k in a) print k,a[k]} ' file | sort a b hello,goodbye a c I say g g test
使用最新版本的 GNU awk,您可以通過以下方式設置數組遍歷順序來避免外部排序
PROCINFO
:awk -F'\t' ' BEGIN{OFS=FS} {k = $1 FS $2} {a[k] = a[k] == "" ? $3 : a[k] "," $3} END{PROCINFO["sorted_in"]="@ind_str_asc"; for (k in a) print k,a[k]} ' file
或者,使用 GNU datamash
datamash groupby 1,2 collapse 3 <file
或者更冗長(但更靈活)的米勒
mlr --nidx --fs tab nest --implode --values --across-records --nested-fs , -f 3 file