Как добавить возрастающее число к строкам, соответствующим шаблону, с Bash (awk) - PullRequest
0 голосов
/ 25 октября 2018

У меня есть файл с многочисленными строками комментариев, случайно выброшенными в таком формате

Comment,blahblahblah
Comment,blahblahblah
Comment,blahblahblah

Я хочу добавить увеличивающийся номер к строкам комментариев, например

Comment,1 blahblahblah
Comment,2 blahblahblah
Comment,3 blahblahblah

Я пробовал этобез удачи

awk '{for(x=1;x<=NF;x++)if($x~/Comment,/){sub(/Comment,/Comment, ++i)}}1' filename 

Ответы [ 4 ]

0 голосов
/ 25 октября 2018
awk '{gsub("Comment,","Comment,"NR,$0);print;}' filename
0 голосов
/ 25 октября 2018

Вам даже не нужно awk для этого (если вам не нужно, чтобы это было быстро).

#!/usr/bin/env bash
counter=0
while IFS= read -r line; do
  [[ $line = *Comment,* ]] && line=${line//Comment,/Comment,$((++i)) }
  printf '%s\n' "$line"
done
0 голосов
/ 25 октября 2018

еще awk

$ awk '{i+=sub(/^Comment,/,"&" i+1 " ")}1' file

Comment,1 blahblahblah
Comment,2 blahblahblah
Comment,3 blahblahblah
0 голосов
/ 25 октября 2018

Второй аргумент sub() должен быть строкой, которая требует кавычек около Comment,.

Также нет необходимости циклически проходить по столбцам, вы можете просто сопоставить всю строку.

awk '/Comment,/ { sub(/Comment,/, "Comment, " ++i) }1' filename
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...