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

use*_*577 1 awk

我是awk和 的新手sed。我有以下几行,如果它与模式不匹配,我想将它向上移动。

文件:

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
Run Code Online (Sandbox Code Playgroud)

......它就这样继续下去

想使用模式匹配 'company name' 。如果该行没有“公司名称”,则向上移动该行。

期望的输出:

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
Run Code Online (Sandbox Code Playgroud)

...然后继续

谢谢你的帮助

Jot*_*tne 5

在这里我们如何做到这一点 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
Run Code Online (Sandbox Code Playgroud)

对于每一4行,使用RS,否则使用,


或者像 Jaypal 建议的那样:

awk '{ORS=(NR%4?", ":RS)}1' file
Run Code Online (Sandbox Code Playgroud)

  • 或 `awk '{ORS=(NR%4?", ":RS)}1' 文件` (2认同)
  • @jaypal 真的很棒!! (2认同)