[20210318]awk分割符FS.txt
--//awk是我最不熟悉的命令,不过工作中需要,测试分割符号FS。
$ echo "1#2-3"
1#2-3
--//如果将#,-作为分割符号如何写呢?
$ echo "1#2-3" | awk -v FS="#-" '{print $1,$2,$3}'
1#2-3
$ echo "1#2-3" | awk -v FS="#" '{print $1,$2,$3}'
1 2-3
$ echo "1#2-3" | awk -v FS="[#-]" '{print $1,$2,$3}'
1 2 3
$ echo "1##2-3" | awk -v FS="[#-]+" '{print $1,$2,$3}'
1 2 3
$ echo "1-#2-3" | awk -v FS="[#-]+" '{print $1,$2,$3}'
1 2 3
--//但是如果分隔符号正好是[]呢?
$ echo map dba 4,151 | rlbbed | grep "sb2 kdbr"
sb2 kdbr[14] @118
--//我仅仅需要输出kdbr[14]里面的数字14,如何实现呢?
$ echo map dba 4,151 | rlbbed | grep "sb2 kdbr" | awk -v FS='[[]' '{print $2}'
14] @118
$ echo map dba 4,151 | rlbbed | grep "sb2 kdbr" | awk -v FS='[[]]' '{print $2}'
--//竟然输出为空。
$ echo map dba 4,151 | rlbbed | grep "sb2 kdbr" | awk -v FS='[]]' '{print $1}'
sb2 kdbr[14
--//很显然分开写[ 或者]都是有效的。
--//改写如下先写] 再写[ 就ok了。
$ echo map dba 4,151 | rlbbed | grep "sb2 kdbr" | awk -v FS='[][]' '{print $2}'
14
--//原来写成FS='[[]]'相当于没有任何分割符。
--//不过最后我还是使用sed来实现。
$ echo map dba 4,151 | rlbbed | grep "sb2 kdbr" | sed -e "s/^.*\[//;s/].*$//"
14
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2763493/ ,如需转载,请注明出处,否则将追究法律责任。