我想用awk分割线。和白色空间,包括切割前导和尾随白色空间。如果我使用-F“[。]”,则不能忽略前导和尾随空格。
例如,此命令将获得IPv4
,因为默认FS将修剪前导空格:
echo " IPv4 Input Packets............................1123330" | awk {print $1}`
但是
echo " IPv4 Input Packets............................1123330" | awk -F"[. ]" {print $1}
将获得NONE。
如何使用IPv4
和1123330
在awk
中获取print $1
和print $4
?
答案 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