歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

AIX下awk語言的內置字符串函數

awk語言內置的字符串函數 
—————————————————————————————————————————————————————————————— 
gsub(r,s)          在整個$0中用s替代r 
gsub(r,s,t)    在整個t中用s替代r 
index(s,t)          返回s中字符串t的第一位置 
length(s)          返回s的長度 
match(s,r)      測試s是否包含匹配r的字符串 
split(s,a,fs)      返回fs上將s分成序列a 
sprint(fmt,exp)    返回經fmt格式化後的exp 
sub(r,s)            用$0中最左邊最長的子串替代s 
substr(s,p)    返回字符串s中從p開始的後綴部分 
substr(s,p,n)      返回字符串s中從p開始長度為n的後綴部分 
—————————————————————————————————————————————————————————————— 
 
1.gsub函數 
將包含4842的行中的4842替換為4899: 
awk 'gsub(/4842/,4899) {print $0}' grade.txt 
J.Troll    07/99  4899  Brown-3  12  26  26 
awk '{if($3~/4842/) print $0}' grade.txt[or awk '$0 ~/4842/ ' grade.txt] 
J.Troll    07/99  4842  Brown-3  12  26  26 
 
2.index函數 
找出ny首次出現的位置: 
awk 'END {print index("Bunny","ny")}' grade.txt 

在第一個域中包含Bunny中找出ny首次出現的位置,並打印此行: 
awk '$1~/Bunny/ {print index($1,"ny") ":" $0}' grade.txt 
6:P.Bunny    02/99  48    Yello    12  35  28 
 
3.length函數 
 
awk 'if(($1~/Tran/) ||  (length($1) > 7)) {print $0}' grade.txt 
報錯: 
awk: Syntax error 
 at line 1 of program << if(($1~/Tran/) ||  ( ... >> 
 context is 
        >>> if <<< (($1~/Tran/) ||  (length($1) > 7)) {print $0} 
awk: bailing out 
 at line 1 of program << if(($1~/Tran/) ||  ( ... >> 
錯誤原因:所有的動作要包含在{}內。 
正確: 
awk '{if(($1~/Tran/) ||  (length($1) > 7)) {print $0}}' grade.txt 
M.Tansley  05/99  48311  Green    8    40  44 
L.Tansley  05/99  4712  Brown-2  12  30  28 
 
4.match函數 
awk 'BEGIN{print match("abcd",/A/)}' 

awk 'BEGIN{print match("abcd",/c/)}' 

awk '$1=="J.Lulu" {print match($1,"u")}' grade.txt 

 
5.split函數 
awk 'BEGIN {print split("123#456#789",myarray,"#")}' 

 
6.sub函數 
awk 'if($1~/Troll/) {print $0}' grade.txt 
if必須放在{}內,否則 
awk: Syntax error 
 at line 1 of program << if($1~/Troll/) {prin ... >> 
 context is 
        >>> if <<< ($1~/Troll/) {print $0} 
awk: bailing out 
 at line 1 of program << if($1~/Troll/) {prin ... >> 
awk '{if($1~/Troll/) {print $0}}' grade.txt 
J.Troll    07/99  4842  Brown-3  12  26  26 
 
7.substr函數 
awk '$1=="L.Tansley" {print substr($1,1,5)}' grade.txt 
L.Tan 
沒第三個參數 
awk '$1=="L.Tansley" {print substr($1,1)}' grade.txt 
L.Tansley 
地三個參數大於域長度 
awk '$1=="L.Tansley" {print substr($1,1,100)}' grade.txt 
L.Tansley 
指定長度 
awk '$1=="L.Tansley" {print substr($1,1,length($1)-1)}' grade.txt 
L.Tansle 
起始位置為0 
awk '$1=="L.Tansley" {print substr($1,0,length($1)-1)}' grade.txt 
L.Tansle 
截取整行 
awk '$1=="L.Tansley" {print substr($0,1,15)}' grade.txt 
L.Tansley  05/9 
打印截取的數據和原數據 
awk '$1=="L.Tansley" {print substr($0,1,15)} END{print $0}' grade.txt 
L.Tansley  05/9 
L.Tansley  05/99  4712  Brown-2  12  30  28 
將截取的字符串連接一個字符串 
awk '$1=="L.Tansley" {print substr($0,1,15) "___3 blanks"}' grade.txt 
L.Tansley  05/9___3 blanks 
取名字 
awk '{print substr($1,3)}' grade.txt 
Tansley 
Lulu 
Bunny 
Troll 
Tansley 
 
8.從shell中向awk傳入字符串 
echo "_yeeXun" | awk '{print length($0)}' 

STR="grade.txt" 
echo $STR| awk '{print substr($STR,1,5)}' 
awk: illegal field $() 
 input record number 1, file - 
 source line 1 of program << {print substr($STR,1 ... >> 
錯誤原因:awk不認識$STR,管道命令傳遞過來的數據,被認為$0,所以應該將$STR替換為$0: 
echo $STR| awk '{print substr($0,1,5)}' 
grade 
截取後綴 
echo $STR| awk '{print substr($0,7)}' 
txt 
echo $STR | awk '{print substr($0,match($0,/\./)+1)}' 
txt 
取目錄下的所有文件的後綴: 
ls -l 
total 28 
-rw-r--r--  1 xxxx    group          0 Nov 19 10:12 cat 
-rw-r--r--  1 xxxx    group        28 Nov 14 20:32 cat_file.txt 
drwxr-xr-x  2 xxxx    group        512 Nov 21 08:30 c_src 
-rw-r--r--  1 xxxx    group        356 Nov 16 19:50 data.f 
-rw-r--r--  1 xxxx    group        284 Nov 19 10:36 delete_me_and_die 
-rwxr--r--  1 xxxx    group        61 Nov  8 09:15 first2 
-rw-r--r--  1 xxxx    group        235 Nov 19 10:44 grade.txt 
-rwxr--r--  1 xxxx    group        354 Nov 17 11:05 info.txt 
-rwxr-----  1 xxxx    group        23 Nov  7 19:12 myfile 
drwxr-xr-x  2 xxxx    group        512 Nov 21 08:30 sql_src 
-rwxr--r--  1 xxxx    group        225 Nov 15 18:08 test.bak 
-rwxr--r--  1 xxxx    group        225 Nov 15 14:12 test.sql 
-rw-r--r--  1 xxxx    group      1998 Nov 15 14:15 who.out 
-rw-r--r--  1 xxxx    group        229 Nov 19 14:44 wow 
 
ls -l | awk '{print substr($9,match($9,/\./)+1)}' 
 
cat 
txt 
c_src 

delete_me_and_die 
first2 
txt 
txt 
myfile 
sql_src 
bak 
sql 
out 
wow 
找到有後綴名的文件 
ls -l | awk '{if(match($9,/\./)>0) {print $9}}' 
cat_file.txt 
data.f 
grade.txt 
info.txt 
test.bak 
test.sql 
who.out 
然後截取後綴: 
ls -l | awk '{if(match($9,/\./)>0) {print substr($9,match($9,/\./)+1)}}' 
txt 

txt 
txt 
bak 
sql 
out 
將文件名字,和後綴名用“#”隔開: 
ls -l | awk '{if(match($9,/\./)>0) {print $9"#" substr($9,match($9,/\./)+1)}}' 
cat_file.txt#txt 
data.f#f 
grade.txt#txt 
info.txt#txt 
test.bak#bak 
test.sql#sql 
who.out#out 
使用“>”將數據寫入文件,直接覆蓋;“>>”,附加。 
Copyright © Linux教程網 All Rights Reserved