根据列中包含的冒号数量修改列中的值

根据列中包含的冒号数量修改列中的值

我将根据第二列包含的冒号数量来操作第二列的内容。如果第二个字段包含多个冒号,那么我将需要第一个冒号之前的内容,否则我将需要整个值。

#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/ cutone-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

也就是说,尝试替换两个冒号(或更多)。

相关内容