[20210318]awk分割符FS.txt

lfree發表於2021-03-18

[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部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2763493/,如需轉載,請註明出處,否則將追究法律責任。