awk以空格为分隔符
root@ubuntu:/home# echo "1 2 3 4" | awk -F' ' '{print $1}'
1
root@ubuntu:/home# echo "1 2 3 4" | awk -F' ' '{print $2}'
2
root@ubuntu:/home# echo "1 2 3 4" | awk -F' ' '{print $3}'
3
root@ubuntu:/home#
如果存在多个空格时,例如在1和2直接增加一个空格,下面这样单独设置的可以正确输出
root@ubuntu:/home# echo "1 2 3 4" | awk -F' ' '{print $2}'
2
root@ubuntu:/home#
如果是带方括号,$2会输出空格,$3会输出2
root@ubuntu:/home# echo "1 2 3 4" | awk -F'[ ]' '{print $2}'
root@ubuntu:/home# echo "1 2 3 4" | awk -F'[ ]' '{print $3}'
2
如果带方括号,再加加号(表示连续多个或1个),$2正常输出
root@ubuntu:/home# echo "1 2 3 4" | awk -F'[ ]+' '{print $2}'
2
但是如果第一个为空格时,会输出:
root@ubuntu:/home# echo " 1 2 3 4" | awk -F' ' '{print $1}'
1
root@ubuntu:/home# echo " 1 2 3 4" | awk -F' ' '{print $2}'
2
root@ubuntu:/home# echo " 1 2 3 4" | awk -F'[ ]+' '{print $1}'
root@ubuntu:/home# echo " 1 2 3 4" | awk -F'[ ]+' '{print $2}'
1
root@ubuntu:/home#
搞晕了。。。
-
行中的连续空格不会分隔空字段。当 FS 的值为 " " 时,awk 首先从记录中去除行首和行尾的空白,然后再分割字段。
-
如果 FS 是其他字符,比如”,“,连续两次出现将分隔一个空字段。如果字符出现在行首或行尾,也会分隔空字段。空格字符做为默认分隔符,是唯一不遵守这些规则的字符。
-
如果通过 -F “[ ]” 指定,执表示通过单个空格分隔,此时,将失去其做为默认分隔符的特性,与其它字符一样,遵守同样的分隔规则。
总结:
示例一,没有指定分隔符,用的默认分隔符,此时行首的连续空白字符被自动去除。
示例二,指定分隔符为空格,等价于默认分隔符。
示例三,指定分隔符为一个或多个连续的“冒号或 tab 键“,此时行首多个连续空白字符被一起计入第一个字段。
示例四,指定分隔符为一个或多个连续的”空白字符或冒号或 tab 键“,此时行首多个连续的空白字符被分隔为一个独立的字段。