Добавление столбцов с помощью awk.Что не так с этой командой awk? - PullRequest
2 голосов
/ 22 марта 2012

Я хочу добавить два столбца в файл с ~ 10000 столбцов. Я хочу вставить в качестве первого столбца номер 22 в каждой строке. Затем я хочу, чтобы исходный первый столбец был вторым, затем в качестве третьего столбца я хочу вставить строку nr (NR), и после этого я хочу, чтобы остальные исходные столбцы были напечатаны. Я думал, что смогу сделать это с помощью следующей строки awk:

awk '{print 22, $1, NR; for(i=2;i<=NF;++i) print $i}' file

Хорошо печатает первые три столбца (22, $ 1, NR), но после этого для каждого значения начинается новая строка, поэтому файл печатается так:

22 $1 NR
$2
$3
$4
etc...

вместо:

22 $1 NR $2 $3 $4 etc...

Что я сделал не так?

Ответы [ 2 ]

4 голосов
/ 22 марта 2012

Как насчет использования printf вместо этого, поскольку print добавляет новую строку.

awk '{printf("%d, %d, %d, ", 22, $1, NR); for(i=2;i<=NF;++i) printf("%d, ", i)}' file

Или вы можете играть с ORS и OFS, Разделителем выходных записей и Разделитель выходного поля .Обычно вы добавляете их в оператор BEGIN следующим образом:

awk 'BEGIN { ORS = " " } {print 22, $1, NR; for(i=2;i<=NF;++i) print $i}{print "\n"}' file 

Обратите внимание, что требуется дополнительный printf "\n", иначе все заканчивается одной строкой ...

Подробнеев разделители ручного вывода gawk

1 голос
/ 22 марта 2012

Для более точного управления форматом вывода, чем тот, который предоставляется print (который по умолчанию печатает новую строку), используйте printf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...