Я имею дело с табличным файлом с тысячами строк и заголовков. Но я должен добавить имя строки (имя строки представляет номер строки) в каждой строке. Как я мог сделать это в линуксе?
Я могу сделать это с помощью Excel, но файлов слишком много, поэтому я хотел бы написать команду Linux, чтобы справиться с этим.
Мой файл выглядит так.
parameter1 parameter2 paramter3
1.2 1.3 1.4
2.1 2.1 1.5
1.5 1.6 2.1
....
И я хотел бы добавить имя строки следующим образом:
sim parameter1 parameter2 paramter3
AM_1_arp 1.2 1.3 1.4
AM_2_arp 2.1 2.1 1.5
AM_3_arp 1.5 1.6 2.1
....
Как я мог сделать это с помощью команд Linux?
С авк:
awk 'NR==1{print "sim "$0;next}{print "AM_"NR-1"_arp "$0}' yourfile
Это говорит:
NR==1
, тогда выведите «sim» плюс всю строку: print "sim "$0;
next
NR
плюс «_arp», затем всю строку $0
.Если у вас есть много файлов в каталоге, для которых вам нужно сделать это, вы можете сослаться на них с помощью подстановочного знака, и вы можете перенаправить вывод внутри awk:
awk 'NR==1{print "sim "$0 > FILENAME"_out";next}{print "AM_"NR-1"_arp "$0 > FILENAME"_out"}' ./yourfile*
Это странно. Я никогда не сталкивался с тем, что NF не работает. Я рад видеть, что встречная версия i++
делает свое дело!
Я пробовал и эту версию, и по какой-то причине у меня тоже странная нумерация вроде: AM_3_arp, AM_3_arp, AM_2_arp, AM_2_arp. Я пробовал с GNU Awk 3.1.7.
@JNevil NF - это количество полей, вы имели в виду NR?
@oguzismail ОМГ СПАСИБО!. Очевидно, мне нужно больше кофе. Пишу эту халтуру годами, а я все равно ее напортачу.
@Bing-HongHuang Я только что обновил, чтобы использовать NR
(номер строки) вместо NF
(количество полей). Очень жаль эту мисс. Я считаю, что обновленный ответ должен работать для вас как есть.
@JNevil Спасибо за любезный ответ, это работает, но начинается с AM_2_arp, а не с AM_1_arp.
@Bing-HongHuang Вы можете просто изменить его с NR
на NR-1
за эту секунду print
. Я обновлю. (Извините за ожидание)
awk 'BEGIN {i=0} {print "AM_" i++ "_arp " $0}' <file> | sed 's/AM_0_arp/sim/g'
Я просто добавлю выбранную вами строку со счетчиком между ними в начало каждой строки, а затем заменю первый экземпляр на sim для заголовка.
Спасибо, я попробовал код, и он печатает имя строки. Но кажется, что NF не работает, все имена строк одинаковые "AM_10_arp"