我有一张这样的桌子:
N1.txt N04_28 31022 39154 t1-8133/8133
N1.txt N04_28 40504 47604 1-7101/7101
N1.txt N05_159 1 6348 t1-6348/8133
N1.txt N05_159 7698 14798 1-7101/7101
N2.txt N06_30 1 6490 t1-6490/8133
N2.txt N06_30 7840 14940 1-7101/7101
N3.txt N07_170 1 6285 t1-6285/8133
N4.txt N07_170 7635 14735 t1-7101/7101
我只想查看第一列,如果该行包含相同的字符串,我想将这些行合并为一行。 输出应该是这样的:
N1.txt N04_28 31022 39154 t1-8133/8133 N04_28 40504 47604 1-7101/7101 N05_159 1 6348 t1-6348/8133 N05_159 7698 14798 1-7101/7101
N2.txt N06_30 1 6490 t1-6490/8133 N06_30 7840 14940 1-7101/7101
N3.txt N07_170 1 6285 t1-6285/8133
N4.txt N07_170 7635 14735 t1-7101/7101
我可以用awk做到这一点,但是我的技能有限。
我看了看this question,它们看起来很相似,但是如果我用/@/
/*.txt/
,它将绑定所有内容
我一遍又一遍地做这些事情,我真的很想学习如何正确有效地做这些事情。 谢谢
答案 0 :(得分:0)
您可以使用awk
:
awk 'BEGIN{ PROCINFO["sorted_in"]="@ind_str_asc" } {
s=$0
sub(/^[[:blank:]]*[^[:blank:]]+[[:blank:]]+/, "", s)
a[$1] = (a[$1] == "" ? "" : a[$1] OFS) s
}
END {
for (i in a) print i, a[i]
}' file | column -t
N1.txt N04_28 31022 39154 t1-8133/8133 N04_28 40504 47604 1-7101/7101 N05_159 1 6348 t1-6348/8133 N05_159 7698 14798 1-7101/7101
N2.txt N06_30 1 6490 t1-6490/8133 N06_30 7840 14940 1-7101/7101
N3.txt N07_170 1 6285 t1-6285/8133
N4.txt N07_170 7635 14735 t1-7101/7101