AWK FS多个分隔符包括triming前导和尾随空格

时间:2016-07-04 03:38:22

标签: bash shell awk

我想用awk分割线。和白色空间,包括切割前导和尾随白色空间。如果我使用-F“[。]”,则不能忽略前导和尾随空格。

例如,此命令将获得IPv4,因为默认FS将修剪前导空格:

echo "              IPv4 Input Packets............................1123330" | awk {print $1}`

但是

echo "              IPv4 Input Packets............................1123330" | awk -F"[. ]" {print $1}

将获得NONE。

如何使用IPv41123330awk中获取print $1print $4

2 个答案:

答案 0 :(得分:3)

您可以在+模式中使用量词FS

s="              IPv4 Input Packets............................1123330"

awk -F '[. ]+' '{print $2, $5}' <<< "$s"

IPv4 1123330

请注意,字段编号将从2开始,因为第一个字段将为空。

您也可以使用print $2, $NF获得相同的输出。

答案 1 :(得分:3)

您必须手动剥离前导/尾随空格,然后重新分配$0以强制字段拆分再次发生:

$ echo "              IPv4 Input Packets............................1123330" |
awk -F'[. ]+' '{sub(/^ +| +$/,""); $0=$0; print $1, $4}'
IPv4 1123330

如果要在剥离中包含所有FS字符:

$ echo "              IPv4 Input Packets............................1123330" |
awk -F'[. ]+' '{sub("^"FS"|"FS"$",""); $0=$0; print $1, $4}'
IPv4 1123330