Объединение полей в Awk

Есть ли простой способ объединить поля в awk? В частности, у меня есть такие строки:

1,2,some text
3,4,some text, but it has commas in it, annoyingly

Я хочу извлечь два числа в качестве первых двух полей, но затем я хочу, чтобы весь текст (запятые и все) был третьим полем. Есть ли способ сделать это?

Мой основной вызов awk был таким:

awk -F\, '{print $1"|"$2"|"$3}' file.txt

Что отлично работает для первой строки, но останавливается на запятой в тексте во второй строке.


awk
person Ben    schedule 31.12.2008    source источник
comment
Ответы, представленные ниже, будут работать. Но если вы можете, в вашем примере вам лучше использовать такой формат, как tsv. Таким образом, вы не будете смешивать содержимое поля и разделитель полей.   -  person Renaud    schedule 09.12.2012


Ответы (2)


Может быть:

awk '{for (i=0;i<2;i++) sub(",", "|", $0); print}' file.txt
person PEZ    schedule 31.12.2008
comment
Де нада. Это не совсем то, что вы просили, но это делает работу. знак равно - person PEZ; 31.12.2008

Вы можете использовать sed для этого.

cat file.txt | sed 's/\(.?*\),\(.?*\),/\1|\2|/'
person PolyThinker    schedule 31.12.2008