awk以空格为分隔符的问题

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# 

搞晕了。。。

后面看大佬总结
awk手册

  • 行中的连续空格不会分隔空字段。当 FS 的值为 " " 时,awk 首先从记录中去除行首和行尾的空白,然后再分割字段。

  • 如果 FS 是其他字符,比如”,“,连续两次出现将分隔一个空字段。如果字符出现在行首或行尾,也会分隔空字段。空格字符做为默认分隔符,是唯一不遵守这些规则的字符。

  • 如果通过 -F “[ ]” 指定,执表示通过单个空格分隔,此时,将失去其做为默认分隔符的特性,与其它字符一样,遵守同样的分隔规则。

总结:

示例一,没有指定分隔符,用的默认分隔符,此时行首的连续空白字符被自动去除。
示例二,指定分隔符为空格,等价于默认分隔符。
示例三,指定分隔符为一个或多个连续的“冒号或 tab 键“,此时行首多个连续空白字符被一起计入第一个字段。
示例四,指定分隔符为一个或多个连续的”空白字符或冒号或 tab 键“,此时行首多个连续的空白字符被分隔为一个独立的字段。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值