awk 仅更改匹配行并打印其余行而不进行修改

aku*_*ula 0 perl awk sed gsub

所以我有一个如下所示的大文件:

RESOURCETAGMAPPINGLIST  arn:aws:ec2:us-east-1:XXXXXX:instance/i-XXXXXXXXXXXXXXXXX
TAGS    app-name    appname1
RESOURCETAGMAPPINGLIST  arn:aws:ec2:us-east-1:XXXXXX:instance/i-XXXXXXXXXXXXXXXXX
TAGS    app-name    appname2
RESOURCETAGMAPPINGLIST  arn:aws:ec2:us-east-1:XXXXXX:instance/i-XXXXXXXXXXXXXXXXX
TAGS    app-name    appname1
..
Run Code Online (Sandbox Code Playgroud)

我只想修改该行RESOURCETAGMAPPINGLIST并打印其他行而不进行修改。然后我想只打印匹配上的特定字段,如下所示:

arn ec2 us-east-1 XXXXXX
TAGS    app-name    appname1
arn ec2 us-east-1 XXXXXX
TAGS    app-name    appname2
arn ec2 us-east-1 XXXXXX
TAGS    app-name    appname1
..
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 awk gsub 命令,但确实无法解决该-F:问题。任何帮助将不胜感激,无论是 awk、sed 还是 perl。

Cyr*_*rus 5

awk。我使用至少一个空格 ( +) 或 ( |) 一个冒号 ( :) 作为输入字段分隔符。

如果一行包含字符串RESOURCETAGMAPPINGLIST,则打印第 2、4、5、6 列并停止处理该行并继续处理下一行。如果某行不包含,RESOURCETAGMAPPINGLIST则不更改地打印完整行。

awk -F ' +|:' '/RESOURCETAGMAPPINGLIST/{print $2,$4,$5,$6; next} {print}' file
Run Code Online (Sandbox Code Playgroud)

输出:

arn ec2 us-east-1 XXXXXX
标签 应用程序名称 appname1
arn ec2 us-east-1 XXXXXX
标签 应用程序名称 appname2
arn ec2 us-east-1 XXXXXX
标签 应用程序名称 appname1

请参阅:Stack Overflow 正则表达式常见问题解答