根據列中包含的冒號數量修改列中的值

根據列中包含的冒號數量修改列中的值

我將根據第二列包含的冒號數量來操作第二列的內容。如果第二個欄位包含多個冒號,那麼我將需要第一個冒號之前的內容,否則我將需要整個值。

#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

也就是說,試著替換兩個冒號(或更多)。

相關內容