Изменить значения в столбце на основе количества содержащихся в нем двоеточий

Изменить значения в столбце на основе количества содержащихся в нем двоеточий

Я бы манипулировал содержимым второго столбца на основе количества содержащихся в нем двоеточий. Если второе поле содержит более одного двоеточия, то я бы потребовал содержимое до первого двоеточия, в противном случае я бы потребовал все значение.

#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-х частей (то есть количество элементов в массиве z), сохраните только первое:

awk '{n=split($2, z, ":");if (n > 2) $2=z[1]};1' infile

Если вы хотите использовать, subвы можете сделать что-то вроде:

awk '{sub(/:.*:.*/,"",$2)};1' infile

то есть попытаться заменить два двоеточия (или более).

Связанный контент