【发布时间】:2021-12-22 01:03:43
【问题描述】:
我有一个制表符分隔的文件,如下所示:
4S2P_1:A 4S2P_1:A
4S2P_1:A 6PXX_1:A
4S2P_1:A 6HB8_1:A
4S2P_1:A 6HOO_1:A
4S2P_1:A 6I5D_1:A
4S2R_1:A 4S2R_1:A
4S2C_1:A 4S2C_1:A
4S2C_1:A 4S2B_1:A
4S2E_1:A 4S2E_1:A
4S2E_1:A 5XB5_1:A
4S2E_1:A 5XBH_1:A
创建文件后,第二列中的序列与第一列中的序列相似。 4S2P_1:A 与自身相似,6Q5B_1:A 和 6PXX_1:A 和 6HB8_1:A 等等。 4S2R_1:A 与自身相似。
我想将文件解析为如下所示:
4S2P_1:A 6PXX_1:A 6HB8_1:A 6HOO_1:A 6I5D_1:A
4S2E_1:A 5XB5_1:A 5XBH_1:A
4S2C_1:A 4S2B_1:A
4S2R_1:A
所以我希望输出的第一列和链接到它的列在一行上用空格隔开,并使形成的簇按降序排列。
我想使用 awk 来执行此操作。
我试过用这个:
awk -F '\t' '{print $1*" "$2}'
但它给了我这个输出:
04S2P_1:A
05DTT_1:A
07ASS_1:A
07AUX_1:A
05HAQ_1:A
05HAP_1:A
05HAR_1:A
它在开头添加一个 0,并且不会将相似的序列保持在同一行。
【问题讨论】:
-
欢迎来到 Stack Overflow (SO)。 SO is a question and answer page for professional and enthusiast programmers。请在您的问题中添加您自己的代码。您应该至少展示自己为解决这个问题所做的研究。
-
您为什么要为此使用
awk?从技术上讲,您可以在阅读文件时将" " $2附加到some_array[$1]。但同样的事情可以直接在 Bash 中使用关联数组来实现,即declare -A some_array等。 -
如果你想用
awk而不是bash来解决它,你应该用“awk”标记你的问题。 -
文件是否已经按第一列排序?除了按字段数对输出进行排序外,对于输出是否还有其他排序要求......无论是在同一行的字段之间,还是在具有相同字段数的行之间?您最大的输入文件有多大(MBytes?行数?)