【问题标题】:AWK to use space and forward slash or comma as separatorAWK 使用空格和正斜杠或逗号作为分隔符
【发布时间】:2020-04-29 04:10:48
【问题描述】:

我希望 awk 有 2 个分隔符,我知道我可以这样传递,

awk -F"=|/" '{print $1}'

但是我正在尝试传递 2 个字段分隔符,即空格(默认 fs)和正斜杠。我想从下面的字符串中提取IP地址。

inet 10.190.120.13/24 brd 10.190.120.255 scope global prefixroute eth0

目前我正在使用带有管道的 2 awk 语句,我相信会有更好的方法来实现这一点。

awk '{print $2}' | awk -F"/" '{print $1}'

【问题讨论】:

  • 如果您希望空格和斜杠作为字段分隔符,您是否尝试过awk -F' |/' '{print $2}' 或者,如果可能有制表符,awk -F'[[:blank:]]|/' '{print $2}'?
  • @John1024 我认为这值得回答。
  • 感谢您的回答,我将其与ip a 命令一起使用,我也尝试过这种方式,但没有释放 ip 在第 6 列中,我得到了理想的结果- ip a | grep eth0$ | awk -F'[[:blank:]]|/' '{print $6}'
  • @opensourcejunkie 非常好。如果您愿意,为了提高效率,可以消除额外的grep 进程:ip a | awk -F'[[:blank:]]|/' '/eno1$/{print $6}'

标签: shell awk


【解决方案1】:

让我们从这个测试文件开始:

$ cat file
inet 10.190.120.13/24 brd 10.190.120.255 scope global prefixroute eth0

如果您希望空格和斜杠作为字段分隔符,请尝试:

$ awk -F' |/' '{print $2}' file
10.190.120.13

如果您的输入可能包含制表符和空格,请尝试:

$ awk -F'[[:blank:]]|/' '{print $2}' file
10.190.120.13

在正则表达式中,| 表示或。因此|/(在竖线之前有一个空格)表示一个空格或一个斜线。 awk 支持 POSIX 正则表达式,在 POSIX 下,[[:blank:]] 将匹配任何制表符或空格。

或者,我们可以将两个选项放在方括号中,例如:

$ awk -F'[[:blank:]/]' '{print $2}' file
10.190.120.13

如果您根据标题,想要空格或斜线或逗号作为分隔符,请尝试:

$ awk -F'[[:blank:]/,]' '{print $2}' file
10.190.120.13

【讨论】:

  • John1024 - 感谢您的解释,非常有帮助。
  • @opensourcejunkie 很高兴它有帮助。
猜你喜欢
  • 1970-01-01
  • 2014-03-09
  • 2017-08-13
  • 2015-01-06
  • 2015-08-31
  • 2023-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多