我正在处理包含以下格式的文件:
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
感谢您的帮助。
答案1
这只是一个排序问题:
head -2 input.file; tail -n +3 input.file | sort -t '|' -k2,2n -k3,3 -k5,5
这意味着:“按第 2 列数字排序。如果平局,则按第 3 列排序。如果平局,则按第 5 列排序。