我将根据第二列包含的冒号数量来操作第二列的内容。如果第二个字段包含多个冒号,那么我将需要第一个冒号之前的内容,否则我将需要整个值。
#Input
1 1131:11854476:4:1$ 0 114476 1 4
5 367504:11862778:4:2$ 0 118628 2 4
3 3:64357_3_2$ 0 18267 2 3
4 7575:38680372:1$ 0 38372 1 2
# Output
1 1131 0 114476 1 4
5 367504 0 118628 2 4
3 3:64357_3_2$ 0 18267 2 3
4 7575 0 386372 1 2
我遇到了在操作或处理整个文件/后复制单个列的不同建议细绳但我需要保留未处理的剩余列。您能否提供有关如何在单个命令(awk
/ cut
one-liners)或多个命令中实现此目的的想法。
答案1
您可以split
打开第二个字段:
,如果您获得超过 2 个字段(即 array 中的元素数量z
),则仅保留第一个字段:
awk '{n=split($2, z, ":");if (n > 2) $2=z[1]};1' infile
如果你想使用sub
你可以这样做:
awk '{sub(/:.*:.*/,"",$2)};1' infile
也就是说,尝试替换两个冒号(或更多)。