我將根據第二列包含的冒號數量來操作第二列的內容。如果第二個欄位包含多個冒號,那麼我將需要第一個冒號之前的內容,否則我將需要整個值。
#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
也就是說,試著替換兩個冒號(或更多)。