如果不匹配模式,awk移动排队

时间:2014-06-05 16:12:16

标签: awk

我是awksed的新手。我有以下几行,如果它与模式不匹配,则想要移动该行。

文件:

company name
address line
city, state, zip
extra info
company name
address line
city, state, zip
extra info
company name
address line
city, state, zip
extra info

......它继续像那样

想要使用模式匹配'公司名称' 。如果该行没有公司名称'移动线。

期望的输出:

company name, address line, city, state, zip, extra info
company name, address line, city, state, zip, extra info
company name, address line, city, state, zip, extra info

...继续

感谢您的帮助

4 个答案:

答案 0 :(得分:4)

我们在这里使用awk

进行操作
awk '{printf "%s"(NR%4?", ":RS),$0}' file
company name, address line, city, state, zip, extra info
company name, address line, city, state, zip, extra info
company name, address line, city, state, zip, extra info

对于每个4行,请使用RS,否则请使用,


或者正如Jaypal所说:

awk '{ORS=(NR%4?", ":RS)}1' file

答案 1 :(得分:1)

paste是这项工作的好工具(假设您可以使用,作为分隔符,而不是,后跟空格)

<file paste -d',' - - - -
company name,address line,city, state, zip,extra info
company name,address line,city, state, zip,extra info
company name,address line,city, state, zip,extra info

可替换地

<file paste -s -d',,,\n'

答案 2 :(得分:1)

$ awk '{printf "%s%s", (/company name/?rs:", "), $0; rs=RS} END{print ""}' file
company name, address line, city, state, zip, extra info
company name, address line, city, state, zip, extra info
company name, address line, city, state, zip, extra info

答案 3 :(得分:0)

你也可以尝试这个awk命令,

awk 'BEGIN{RS="company"}{ gsub (/\n/,", ");} NR>=2 {sub (/, $/,""); print RS$0}' file

示例:

$ cat file
company name
address line
city, state, zip
extra info
company name
address line
city, state, zip
extra info
company name
address line
city, state, zip
extra info

$ awk 'BEGIN{RS="company"}{ gsub (/\n/,", ");} NR>=2 {sub (/, $/,""); print RS$0}' file
company name, address line, city, state, zip, extra info
company name, address line, city, state, zip, extra info
company name, address line, city, state, zip, extra info