Добавьте серийный номер в качестве последовательности к каждой строке в файле в UNIX в определенной позиции - PullRequest
1 голос
/ 24 октября 2019

У меня есть файл Unix с несколькими строками и разделенными запятыми полями. Мне нужно вставить новое поле в каждой строке как серийный номер (1,2,3 ..) на 3-й позиции после запятой

Текст перед

roy,mike,apple,alex
roy,apple,water,joe
lemon,tony,juice,fred

Текст после

roy,mike,apple,1,alex
roy,apple,water,2,joe
lemon,tony,juice,3,fred

Ответы [ 3 ]

5 голосов
/ 24 октября 2019

Хотя ссылка используется oguz ismail , но кажется, что решения ссылки немного сложны по сравнению с этой проблемой, поэтому добавьте простую здесь.

awk 'BEGIN{FS=OFS=","} {$NF=++count OFS $NF} 1'  Input_file

ИЛИ согласно комментарию anubhava sirВы также можете попробовать выполнить следующее.

awk 'BEGIN{FS=OFS=","} {$NF = FNR OFS $NF} 1' Input_file

В этих решениях предполагается, что порядковый номер должен быть вставлен перед последним полем ($NF), как показано в вопросе.

FNR - этономер записи в индивидуальном входном файле. Если вы укажете более одного файла в командной строке, это число будет возвращаться к 1 для каждого нового файла. Если вы хотите, чтобы порядковый номер продолжал считать по всем входным файлам, используйте NR вместо FNR.

1 голос
/ 28 октября 2019
awk -F, -vOFS=, '{$4=NR}1' filename
1 голос
/ 25 октября 2019

Это должен быть более правильный ответ, так как он запрашивал вставку поля после 3 столбца, а не второго последнего, как в ответе Равиндера

awk -F, -v OFS=, '{$3=$3FS FNR}1' file
roy,mike,apple,1,alex
roy,apple,water,2,joe
lemon,tony,juice,3,fred
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...