Как я могу использовать sed, чтобы добавить строки между двумя шаблонами? - PullRequest
0 голосов
/ 27 июня 2018

У меня есть файл, и я пытаюсь выяснить, как использовать sed для добавления текста следующим образом; в файле есть строки с состоянием, а затем строки с городами из этого штата.

state NY  
city Manhattan  
city Brooklyn  
city Bronx  
end state  
state CA  
city Los Angeles  
city San Francisco  
city San Diego  
end state  
state IL  
city Chicago  
city Springfield  
city Rockford  
end state  

Попытка получить вывод, если информация о заголовке (состояние) добавляется в конец строки города, поэтому я получаю файл, подобный следующему:

city Manhattan,NY  
city Brooklyn,NY  
city Bronx,NY  
city Los Angeles,CA  
city San Francisco,CA  
city San Diego,CA  
city Chicago,IL  
city Springfield,IL  
city Rockford,IL

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Это может сработать для вас (GNU sed):

sed '/^state/h;/city/!d;G;s/ *\nstate /,/;s/ *$//' file

Скопируйте любую строку, которая начинается с state, в область удержания (HS). Удалите все строки, которые не содержат слово city. Добавьте HS к пространству шаблона (PS). Удалите все пробелы в конце текущей строки, добавленную новую строку и литерал state, за которым следует пробел. Удалите все дополнительные пробелы в конце строки.

0 голосов
/ 27 июня 2018

Не могли бы вы попробовать следующее.

awk '/^state/{val=$NF;next} val{print $0","val}'  Input_file

Объяснение: Добавление объяснения тоже сейчас.

awk '
/^state/{         ##Check condition if a line starts from string state then do following.
  val=$NF;        ##Creating variable val whose value is last field of current line.
  next}           ##Using next keyword to skip all further statements.
val{              ##Checking condition if variable val is NOT NULL then do following.
  print $0","val  ##Printing current line with command and variable val here.
}'  Input_file    ##Mentioning Input_file name here.
...