Bash AWK FS多个分隔符包括修剪前导空格和尾随空格
我想用awk来分割线。和空白,包括切割前导和尾随空白。如果使用-F“[.]”,则不能忽略前导和尾随空格 例如,此命令将获得IPv4,因为默认FS将修剪前导空间:Bash AWK FS多个分隔符包括修剪前导空格和尾随空格,bash,shell,awk,Bash,Shell,Awk,我想用awk来分割线。和空白,包括切割前导和尾随空白。如果使用-F“[.]”,则不能忽略前导和尾随空格 例如,此命令将获得IPv4,因为默认FS将修剪前导空间: echo " IPv4 Input Packets............................1123330" | awk {print $1}` 但是 echo " IPv4 Input Packets............................112333
echo " IPv4 Input Packets............................1123330" | awk {print $1}`
但是
echo " IPv4 Input Packets............................1123330" | awk -F"[. ]" {print $1}
一个也得不到
如何在
awk
中使用print$1
和print$4
获取IPv4
和1123330
?您可以在FS
模式中使用量词+
s=" IPv4 Input Packets............................1123330"
awk -F '[. ]+' '{print $2, $5}' <<< "$s"
IPv4 1123330
s=“IPv4输入数据包1123330”
awk-F'[.]+'{print$2,$5}'您必须手动去除前导/尾随空格,然后重新分配$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
谢谢你的快速回复。但为什么1美元是空的?有没有一种方法可以让我用$1获得IPv4,用$4获得1123330?我不知道为什么,但这是我们在awk中使用任何非空的FS
时的行为。即使是awk-F'[[:blank:][]+'
也会将$1
保留为空。@vinllen:不清楚您是否意识到可以直接使用$2
来代替,对吗?祝你好运。$1
是空的,因为,$1
是空的。您告诉awk将记录拆分为由空格或句点链分隔的字段。第一个空格或句点序列之前没有任何内容,因此第一个字段为空。在字段拆分过程中,awk唯一一次“特别”处理前导/尾随空格并忽略它们是在FS是“
(单个空白字符)的默认值时。是的,我的意思是”
的默认FS
的行为不同。它不仅拆分空格字段,还拆分制表符字段。它使用-F'[\t]+'
有效地分割字段,并且不会使$1
为空。然而,当我们在代码中使用awk-F'[\t]+'
时,它将$1
留空。