Awk
如何按多列對 CSV 行進行分組
我正在處理一個包含以下格式的文件:
R | CF | PN | seq | UC 801 | 10 | P3 | 643455423 | C1 804 | 11 | P1 | 643455427 | C1 804 | 11 | P1 | 643455427 | C5 802 | 11 | P2 | 643455431 | C1 800 | 11 | P2 | 643455429 | C2 800 | 11 | P2 | 643455429 | C2 802 | 11 | P2 | 643455431 | C2 800 | 11 | P3 | 643455423 | C1 804 | 11 | P3 | 643455433 | C2 802 | 11 | P3 | 643455425 | C3 804 | 11 | P3 | 643455433 | C3 802 | 11 | P4 | 643455425 | C2 801 | 12 | P1 | 643455424 | C2 801 | 12 | P1 | 643455424 | C2 805 | 12 | P1 | 643455434 | C2 805 | 12 | P1 | 643455434 | C3 805 | 12 | P3 | 643455428 | C1 805 | 12 | P3 | 643455428 | C1 801 | 12 | P3 | 643455430 | C3 803 | 14 | P1 | 643455432 | C1 803 | 14 | P1 | 643455432 | C1 803 | 14 | P2 | 643455426 | C1 803 | 14 | P2 | 643455426 | C3 801 | 19 | P4 | 643455430 | C3
我正在嘗試按這三列中最相似的(最大公除數)對行進行分組。
這意味著如果兩行或更多行共享相同的 CF-PN-UC 值,則應將它們分組,如果不是,則應將共享相同 CF-PN 的那些進行分組,但如果不是,則其餘的必須按 CF 分組.
有沒有辦法讓我得到以下結果?
R | CF | PN | seq | UC #CF 801 | 10 | P3 | 643455423 | C1 #CF-PN 804 | 11 | P1 | 643455427 | C1 804 | 11 | P1 | 643455427 | C5 #CF-PN-UC 800 | 11 | P2 | 643455429 | C2 800 | 11 | P2 | 643455429 | C2 802 | 11 | P2 | 643455431 | C2 #CF-PN 800 | 11 | P3 | 643455423 | C1 804 | 11 | P3 | 643455433 | C2 #CF-PN-UC 802 | 11 | P3 | 643455425 | C3 804 | 11 | P3 | 643455433 | C3 #CF 802 | 11 | P2 | 643455431 | C1 802 | 11 | P4 | 643455425 | C2 #CF-PN-UC 801 | 12 | P1 | 643455424 | C2 801 | 12 | P1 | 643455424 | C2 805 | 12 | P1 | 643455434 | C2 #CF-PN-UC 805 | 12 | P3 | 643455428 | C1 805 | 12 | P3 | 643455428 | C1 #CF 805 | 12 | P1 | 643455434 | C3 801 | 12 | P3 | 643455430 | C3 #CF-PN-UC 803 | 14 | P1 | 643455432 | C1 803 | 14 | P1 | 643455432 | C1 #CF-PN 803 | 14 | P2 | 643455426 | C1 803 | 14 | P2 | 643455426 | C3 #CF 801 | 19 | P4 | 643455430 | C3
謝謝你的幫助。
這只是一個排序問題:
head -2 input.file; tail -n +3 input.file | sort -t '|' -k2,2n -k3,3 -k5,5
這意味著:“按數字按第 2 列排序。在平局的情況下,按第 3 列排序。在平局的情況下,按第 5 列排序。