Linux中awk的gsub函式用法

2022-08-20 00:51:13 字數 1657 閱讀 9541

一。遇到的問題:

問題:echo "a b c 2011-11-22 a:d" | awk '$4=gsub(/-/,"",$4)'為啥 輸出後 2011-11-22 變成 2 了?

解答:gsub(/-/,"",$4)的值是2【在賦值的情況下是這樣的~】,你將2賦值給$4 ,gsub返回的是替換的次數。

如下是測試結果:

[root@test230 ~]# echo "a b c 2011-11-22 a:d" | awk '$4=gsub(/-/,"",$4)'

a b c 2 a:d

看另一種情況,只是替換的話~

[root@sor-sys config]# echo "a b c 2011-11-22 a:d" | awk 'gsub(/-/,"",$4)'

a b c 20111122 a:d

[root@sor-sys config]# echo "a b c 2011-11-22 a:d" | awk 'gsub(/-/,"_",$4)'

a b c 2011_11_22 a:d

二。例項詳解

下面我們來總結一下這個gsub的用法:

0001|20081223efskjfdj|ereadfasdlkjcv

0002|20081208djfksdaa|jdkfjalsdjfsddf

0003|20081208efskjfdj|ereadfasdlkjcv

0004|20081211djfksdaa1234|jdkfjalsdjfsddf

以'|'為分隔, 現要將第二個域字母前的數字去掉,其他地方都不變, 輸出為:

0001|efskjfdj|ereadfasdlkjcv

0002|djfksdaa|jdkfjalsdjfsddf

0003|efskjfdj|ereadfasdlkjcv

0004|djfksdaa1234|jdkfjalsdjfsddf

解法:awk -f '|'  '' data.test 

三。sub和gsub的區別

sub匹配第一次出現的符合模式的字串,相當於 sed 's//'   

gsub匹配所有的符合模式的字串,相當於 sed 's//g'   

awk的sub函式用法:

sub函式匹配指定域/記錄中最大、最靠左邊的子字串的正規表示式,並用替換字串替換這些字串。如果沒有指定目標字串就預設使用整個記錄,替換只發生在第一次匹配的時候。

例項:$ awk '' testfile

$ awk '' testfile

第乙個例子在整個記錄中匹配,替換只發生在第一次匹配發生的時候。

第二個例子在整個記錄的第乙個域中進行匹配,替換只發生在第一次匹配發生的時候

gsub函式作用如sub,但它在整個文件中進行匹配。        

例項:$ awk '' testfile

$ awk '' testfile

第乙個例子在整個文件中匹配test,匹配的都被替換成mytest。

第二個例子在整個文件的第乙個域中匹配,所有匹配的都被替換成mytest。

只有當記錄中的域有改變的時候

,指定0fs變數才有用, 如果記錄中的域無變化, 指定ofs產生不了實際效果。

awk -f'|' -v ofs='|' '' data.txt   

將把第三個域中所有數字都去掉。

ruby中gsub和gsub 的區別

ruby中帶 和不帶 的方法的最大的區別就是帶 的會改變呼叫物件本身了。比方說str.gsub a b 不會改變str本身,只會返回乙個新的str。而str.gsub a b 就會把str本身給改了。但是gsub和gsub 還有另外乙個不同點就是,gsub不管怎麼樣都會返回乙個新的字串,而gsub ...

ruby中gsub和gsub 的區別

ruby中帶 和不帶 的方法的最大的區別就是帶 的會改變呼叫物件本身了。比方說str.gsub a b 不會改變str本身,只會返回乙個新的str。而str.gsub a b 就會把str本身給改了。但是gsub和gsub 還有另外乙個不同點就是,gsub不管怎麼樣都會返回乙個新的字串,而gsub ...

Linux中awk命令的使用

awk 引數 filename引數 含義 f 分割字串 要執行的操作裡面可以使用if,for,正規表示式 awk內建變數 變數含義 nr當前行號 nf當前行分隔出了多少列 awk f debug.log f 表示每一行用逗號分隔 表示列印出每行的第一列 awk f debug.log s 表示字串佔...