首頁  >  文章  >  php教程  >  awk指令與實例

awk指令與實例

高洛峰
高洛峰原創
2016-12-15 11:09:261866瀏覽

AWK介紹
9.1    呼叫awk
三種方式:
1.    命令列方式:    
awk [-F filed-separator的命令
input-files    要處理的文件
2.    將所有awk命令插入一個文件,並使awk程式可執行,然後用awk命令解釋器作為腳本的首行,以便透過鍵入腳本名稱來調用它
3 .    將所有的awk指令插入單獨文件,然後呼叫:
awk -f awk-script-file input-files
-f    指明呼叫腳本名稱
input-files   待處理的檔案指令呼叫awk時,awk腳本由各種操作和模式組成。
awk每次讀取一筆記錄或一行,並使用指定的分隔符號分隔指定域。當新行出現時,awk指令得知已讀完整筆記錄,然後在下一個記錄啟動讀取指令,這個讀取進程將持續到檔案尾或檔案不再存在。
9.2.1    模式和動作
任何awk語句都由模式和動作組成。模式部分決定動作語句何時觸發及觸發條件。處理即對資料進行的操作。如果省略模式部分,動作將時時保持執行狀態。
模式可以是任何條件語句、複合語句或正規表示式,包括兩個特殊欄位BEGIN和END。使用BEGIN語句設定計數和列印頭。 BEGIN語句用在任何文字瀏覽動作之前,之後文字瀏覽動作依據輸入檔開始執行。 END語句用在awk完成文字瀏覽動作後列印輸出文字總數和結尾狀態標誌。如果不特別指明模式,awk總是匹配。
實際動作在大括號{}內指明。動作大多用來列印,但還有些較長的程式碼諸如if和循環語句及循環退出結構。如果不指明採取動作,awk將列印出所有瀏覽出來的記錄。
9.2.2    域和記錄
awk執行時,其瀏覽域標示為$1,$2…$n,此方法稱為域標識。當需要指定多域時使用逗號,用於分隔,如$1,$3指定第一域和第三域,如果希望指定所有域可使用$0。
使用print指令執行列印操作,這是一個awk指令,需要用{}括起來。
1.    抽取域
舉例: 現有一個grade.txt文件,內容物如下:
$ cat grade.txt
M.Tansley      
J.Lulu            06/99            06/99    48317    Green    9   P.Bunny        02/99    48        Yellow    12    35    28
J.Troll            07/99    4842    Brown-3    12    26    26
L.Tansley        05/99    4712    Brwon-2    12    30    28
此文本文件有7個域,以空格作為域分隔符號
2.    保存awk輸出
兩種方式保存awk的輸出結果:
重定向到檔案:(螢幕無顯示)
$ awk '{print $0}' grade.txt >wow
使用管道將輸出結果傳給tee:(屏幕顯示結果)
$ awk '{print $0}' grade.txt|tee woww
3.    使用標準輸入
幾種方法:
$ belts.awk grade.txt
$ belts.awk 4.    列印所有記錄
$ awk '{print $0}' grade.txt
5.    列印單獨記錄
只列印$1和$4:
$ awk '{print $1,$44)' gradetxt
.    自訂格式列印
可以在$1和$4的上方加上註釋,Name和Belt:
$ awk 'BEGIN {print "NamettBeltn--------------------- ----"} {print $1"t"$4}' grade.txt
在結尾加上結束註解:
$ awk 'BEGIN {print "NamettBeltn--------------- ----------"} {print $1"t"$4} END {print "-------------------------nEnd of report"}' grade.txt
7.    awk錯誤訊息提示
在碰到awk錯誤時,可相應查找:
•    確保整個awk指令用單引號括起來
•  確保用大括號{}括起動作語句,用括號()括起條件語句
•    可能忘記使用大括號{}
8.    awk鍵盤輸入
如果沒有給出輸入文件,awk從鍵盤獲得輸入,完成後按結束輸入
9.2.3    元字符
^ $ . [
9.2.3    元字符
^ $ . [ ] | ( ) * + ?
其中+和?只適用於awk而不適用於grep或sed:
+    匹配一個或一個以上前面的單字元
?    匹配0個或一個前面的單字元
舉例:
/XY+Z/  XYZ、XYYYYZ
/XY?Z/    配對XYZ、XZ
9.2.4    條件運算子
運算子                         小於等於
  ==               等於     大於
  >=              大於等於
~           配對正規表示式
  !~          不符合正規表示式
1.    搭配-使用後配位與正規表示式
1.    配對
使用後配位與常態表達式。所有狀況(印出$4符合Brown的行)
$ awk '{if ($4~/Brown/) print $0}' grade.txt

$ awk '$0 ~ /Brown/' grade.txt
2.    精確配對
使用==並用雙引號括起條件可以精確匹配條件
舉例:
$ awk '{if ($3 == "48") print $0}' grade.txt
3.    不匹配
使用!~正規表示式不符域
舉例:
查詢不是棕帶的所有學員情況(印出$4不符Brown的行)
$ awk '{if ($4!~/Brown/) print $0}' grade.txt

$ awk '$0 !~ /Brown/' grade.txt
4.    比較
由於幾個比較大小符的使用方法都一樣,就隨便舉一個例子:
$ awk '{if ($6 5.    各種符合
符合Green或green:
$ awk '/[Gg]reen/' grade.txt
符合$1的第四個字元是a :
$ awk '$1 ~ /^...a/' grade.txt
符合Yellow或Brown:
$ awk '$4 ~ /Yellow|Brown/' grade.txt
符合以J開頭的行:
$ awk '$0 ~ /^J/' grade.txt
6.    複合表達式
複合模式或複合操作符用於形成複雜的邏輯操作,複合表達式即為模式間透過使用複合操作符互相結合起來的表達式
&&    AND:    符號兩邊必須同時為真
|| OR:    符號兩邊至少一邊為真
! :    非求逆_(Im====) 舉例Yellow") print $0}' grade.txt
$ awk '{if ($4 == "Yellow" || $4 ~ /Brown/) print $0}' grade.txt
9.2.5    awk內建變數
awk有許多內建變數用來設定環境訊息,常用的有:
ARGC        命令列參數個數
ARGV        命令列參數排列
ENVIRON            目前文件已處理的記錄行數
FS            設定域分隔符,相當於-F
NF            域的列數
,   1     設定輸出字段域分隔符號
RS/ORS        換行符

ARGC支援命令列中傳入awk腳本的參數個數。 ARGV是ARGC的參數排列數組,其中每一元素表示為ARGV[n],n為希望訪問的命令行參數
ENVIRON支持系統設置的環境變量,要訪問單獨變量,使用實際變量名,如ENVIRON[“ EDITOR”]=”Vi”
FILENAME為awk腳本目前操作檔的檔名
FNR為awk目前操作檔的記錄行數,其值總是小於等於NR。如果腳本正在存取多個文件,每個輸入文件都會重置此變數
FS用來設定域分隔符,與命令列中-F相同,缺省為空格。如: 以冒號為分隔符號FS=":"
NF為記錄域個數(列數),在記錄被讀取之後設置,常用$NF指定最後一列
OFS指定輸出記錄的域分隔符,缺省為空格。如: 以-為分隔符號輸出FS="-"
ORS與RS都為輸出記錄分隔符,缺省是新行(n)
舉例:
查看檔案的記錄數:
$ awk 'END {print NR }' grade.txt
列印所有記錄及記錄的行號及總域數,並在最後列印出讀取檔案的檔案名稱:
$ awk '{print NF,NR,$0} END {print FILENAME}' grade .txt
至少包含一個記錄且包含Brown:
$ awk '{if (NR > 0 && $4 ~ /Brown/) print $0}' grade.txt
NF的一個強大功能是將變數$PWD的回傳值傳入awk並顯示其目錄:
$ echo $PWD | awk -F/ '{print $NF}'
顯示檔案名稱:
$ echo "/usr/apache/conf/httpd.conf" | awk -F/ ' {print $NF}'
9.2.6    awk運算子
awk運算子的基本運算式可以分割成數字型、字串型、變數型域及陣列元件
= += -= *= /= %= ^ =            賦值運算子
?                         與、非
~ !~                        配對運算子(符合與不符)
++ --                 域名是一種好習慣,在進行模式匹配或關係操作時更容易理解。一般的變數名設定方式為name=$n,這裡name為呼叫的域變數名,n為實際域號。多個網域設定之間用分號;分隔(請注意下面;的使用)
$ awk '{name = $1;belts = $4; if (belts ~ /Yellow/) print name" is belt "belts}' grade .txt
2.    域值比較操作
有兩種方式測試一數值域是否小於另一數值域:
1)    在BEGIN中給變數名稱賦值
2)    在關係運算子中使用實際數值來源
通常在BIN部分賦值是很有益的,可以在awk表達式進行改動時減少很多麻煩。使用關係運算時必須用圓括號括起來。舉例:
查詢所有比賽中得分在27點一下的學生:
$ awk '{if ($6 或
$ awk 'BEGIN {BASELINE = "27"} {if ( $6 3.    修改數值域取值
當在awk中修改任何域時,重要的一點是要記住實際輸入檔案是不可修改的,修改的只是保存在緩存裡的awk複本。 awk會在變數NR或NF中反映修改痕跡
為修改數值域,簡單的給域識別重賦新值。範例:
$ awk '{if ($1 == "M.Tansley") $6 = $6 - 1; print $1,$6,$7}' grade.txt
4.    修改文本域
修改文本域即對其重新賦值,賦給一個新的字串。記住,字串要使用雙引號,並用圓括號括起整個語法。範例:
$ awk '{if ($1 == "J.Troll") ($1 = "J.L.Troll"); print $1}' grade.txt
5.    只顯示修改記錄
如果文件很大,修改的記錄很多,所以需要只查看修改部分。在模式後面使用大括號{}將只列印修改部分。取得模式,再根據模式結果實施操作。範例:(注意大括號的位置)
$ awk '{if ($1 == "J.Troll") {$1 = "J.L.Troll"; print $1}}' grade.txt
6.    建立新的輸出域
在awk中處理資料時,基於各網域進行運算時建立新網域是一種好習慣。建立新域要透過其他域賦予新域識別碼。舉例:
在grade.txt中建立新域8保存域目前級別分與域最高級別分的差值:
$ awk 'BEGIN {print "NametDifference"} {if ($6 或賦予方便理解的變數名稱:
$ awk 'BEGIN {print "NametDifference"} {if ($6 7.    增加列值
使用符號+=增加列數或進行運算結果統計。將符號右邊的變數域的值賦給左邊。
舉例:
印出所有學生的總成績(將整個文件的$6求和,total為變數名稱):
$ awk '(total += $6); END {print "Club student total points: "total}' grade.txt
如果文件很大,只想列印結果部分而不是所有記錄,在語句的外面加上大括號{}即可:
$ awk '{(total += $6)}; END {print "Club student total points: "total}' grade.txt
查看目前目錄所有檔案大小及總和(除去子目錄):
$ ls -l|awk '/^[^d]/ {print $9"t"$5} {total += $5 } END {print "total Bytes: "total}'
9.2.9    內建的字串函數
awk有許多強大的字串函數:
gsub(r,s,t)             取代所有滿足正規表示式r的字串(如沒指定t則預設為$0)
index(s,t)                返回字串s中字串t第一次出現的位置(如不存在則為0)
length(s)                返回s字串的長度(如沒指定s則預設為$0)
match(s,r)         的則為0)
split(s,a,sep)            使用sep將字串s分隔成為數組a的元素,並傳回數組元素的數量(如果沒有指定分隔符號則預設與FS相同用法)
sprint("fmt ",exp)        使用printf的格式說明對錶達式exp 進行格式化輸出
sub(r,s,t)                在符合符合執行中以s字串替換為正規表示式字串的第一個表達式,則傳回滿足正式字串1若成功,否則回傳0(如未指定t則預設為$0)
substr(s,p,n)            傳回字串s中以p位置開始長度為n的字串(若未指定n則傳回從p位置所有開始的字串)
tolower(s)            將字串s中的所有大寫字母轉換為小寫,回傳轉換後的字串
toupper(s)          後的字串
1.    gsub(r,s,t)
在整個字串t中以字串s取代所有滿足正規表示式r的字串(如沒指定t則預設為$0):
$ awk 'gsub(/4842/,4899) {print $0}' grade.txt

$ awk '{if (gsub(/4842/,4899)) print $0}' grade.txt
2.    index(s )
傳回字串s中字串t第一次出現的位置(如不存在則為0)。必須用雙引號將字串都括起來:
$ awk 'BEGIN {print index("Benny","ny")}' grade.txt
3.    length(s)
傳回s字串的長度(如沒指定s則預設為$0):
$ awk '$1 == "J.Troll" {print length($1)" "$1}' grade.txt
$ awk 'BEGIN {print length("Kevin is a good boy. ")}'
4.    match(s,r)
傳回第一個滿足正規表示式r的字串在s字串裡面的位置:
$ awk 'BEGIN {print match("ANCD",/d/ )}'(回傳0)
$ awk '$1=="J.Lulu" {print match($1,/u/)}' grade.txt(傳回第一個u在J.Lulu的位置: 3)
5.    split(s,a,sep)
使用sep將字串s分隔成為陣列a的元素,傳回陣列元素的數量:
$ awk 'BEGIN {print split("123#456#789",array, "#")}'
回傳3,陣列array的元素分別為:
array[1]="123"
array[2]="456"
array[3]="789"
6.    sub(r ,s,t)
在字串t中用s字串替換滿足正規表示式r的第一個字串,返回1如果成功,否則返回0(如沒指定t則預設為$0):
$ awk '$1​​ == "J.Troll" {if (sub(/26/,"29")) print}' grade.txt
7.    substr(s,p,n)
返回字串s中以p位置開始長度為n的字串(如果沒指定n則傳回從p位置開始的所有字串):
$ awk '$1 == "L.Tansley" {print substr($1,1,5)}' grade.txt (返回L.Tan)
如果給定長度值n大於字串長度,則awk將從起始位置傳回所有字元:
$ awk '$1 == "L.Tansley" {print substr($1,3,15 )}' grade.txt(返回Tansley)
如果沒指定n,則awk將從起始位置返回所有字元:
$ awk '{print substr($1,3)}' grade.txt
在BEGIN部分定義字符串,在END部分返回抽取的字元:
$ awk 'BEGIN {STR="Kevin is a good boy."} END {print substr(STR,12,8)}' grade.txt
8.    從shell向awk傳入字串
$ echo "Stand-by"|awk '{print length($0)}'
設定檔名為一變量,取檔名:
$ STR="grade.txt"
$ echo $STR|awk '{print substr($STR,1,5)}'
取檔名後綴:
$ STR="grade.txt"
$ echo $STR|awk '{print substr($STR, 7) }'
9.2.10    awk輸出函數printf
awk提供函數printf,具有幾種不同的格式化輸出功能。每一種printf函數(控制格式字元)都以一個%符號開始,以一個決定轉換的字元結束。轉換包含三種修飾符。
語法:
printf "格式控制符",參數

awk printf修飾符
-        左對齊
Width  
awk printf格式
%c        ASCII字元
%d        整數
%e          awk決定使用哪一種浮點數轉換(e或f)
%o        八進制數
%s        字串
%x        十六進位數
舉例:
字元轉換:
$ awk 'BEGIN {printf "%cn",65}' grade:x​​
$ awk 'BEGIN {printf "%cn",65}' grade.序號,要求名字左對齊,15個字元長度,後面跟著序號:
$ awk '{printf "%-15s %sn",$1,$3}' grade.txt
再加入註解:
$ awk 'BEGIN { print "NamettNumber"} {printf "%-15s %sn",$1,$3}' grade.txt
9.2.11    向一行awk指令傳值
在awk執行前將值傳入awk變量,則需要將變數放在命令列下,格式:
awk 命令變數=輸入檔案值
舉例:
$ awk '{if ($5 查詢可用空間小於36000M的分區:
$ dfade.txt
查詢可用空間小於36000M的分區:
$ dfade.txt
查詢可用空間小於36000M的分區:
$ dfade.txt -m|awk '($4 ~ /^[0-9]/) {if ($4 awk也允許傳入環境變數。舉例:
查詢目前使用者登陸在哪個連接埠:
$ who|awk '{if ($1 == user) print $1" you are connected to "$2}' user=$LOGNAME
9.2.12    awk腳本檔案
可以將awk腳本寫入一個檔案再執行它。使用awk腳本的好處是不比每次使用時都需要重新輸入,並且可以增加註釋便於理解。拿一個awk腳本舉例:
#!/bin/awk -f
# all comment lines must start with a hash '#'
# name: student_total.awk
# to call: student_total.awk grade.txt and average of club student points

# print a header first
BEGIN{
print "StudentttDatetNumbertGradetAgetPointstMax"
print "NamettJo====== ================================================== =="
}

# let's add the scores of points gained
(total += $6)

# finished processing now let's print the total and average pointpoint: END "Average Club Student points: " total/NR
}
第一行是#!/bin/awk -f,這一行很重要,沒有它腳本將不能執行,因為它告知腳本系統中awk的位置。透過將命令分開,腳本的可讀性提高,也可以在命令之間加入註解。
執行時在腳本檔案後鍵入檔案名,但需要先賦予可執行權限。
9.2.13    在awk中使用FS變數
使用awk腳本時,設定FS變數是在BEGIN部分。如果不這樣,awk不知道域分隔符號是什麼。
腳本舉例:(此腳本從/etc/passwd抽取第一和第五域)
#!/bin/awk -f
# to call: passwd.awk /etc/passwd
# print out the first and fifth fields
BEGIN {
FS=":"}
{print $1,"t",$5}

9.2.14    向awk腳本傳值
向awk腳本傳值與向awk命令行傳值方式大致相同,格式格式:
awk_script var=value input_file
舉例:
#!/bin/awk -f
# name: age.awk
# to call: age.awk AGE=n grade.er
# prints # to call: age.awk AGE=n grade.er supplied on the command line
{if ($5 print $0}
執行方式:(別忘了先賦予可執行權限)
$ ./age.awk AGE=10 grade.txt
也可以使用管道指令將指令的結果傳遞給awk腳本,例如
$ cat grade.txt |./ student_total.awk
9.2.15    awk陣列
陣列使用前不必定義,也不必指定陣列元素個數。經常使用循環來存取數組,下面是一種循環類型的基本結構:
for (element in array) print array[element]
舉例:(前面提到的字串123#456#789)
#!/ bin/awk -f
# name: arraytest.awk
# prints out an array
BEGIN {
record="123#456#789";
split(record,array,"#")
}
END {
for (i in array) {
print array[i]
}
}
使用/dev/null作為輸入運行腳本:
$ ./arraytest. awk /dev/null

從指定文字裡找出符合條件的項目及其出現的次數
#!/bin/awk -f
# name: count.awk
# to call: count.awkgrade2.txt
# 循環遍歷Grade2.txt 檔案並計算我們有多少腰帶(黃色、橘色、紅色)
# 也計算我們有多少成人和青少年
# BEGIN 開始
# 設定FS 並用我們的值載入陣列
BEGIN {FS="# "
#載入我們只感興趣的皮帶顏色
belt["Yellow"]
belt["Orange"]
belt["Red"]
#BEGIN結束
#載入學生type
student["Junior"]
student ["Senior"]
}
# 循環遍歷數組,將腰帶顏色與字段1 保持一致
# 如果我們有匹配項,則保留運行總計
{for (腰帶中的顏色)
  {if ($1 == color )
  Belt[colour]++}}
# 循環保存學生類型的陣列
# field-2 如果我們有匹配項,則保留運行總計
{for (senior_or_junior in Student)
  {if ($2 == Senior_or_junior)
  Student[senior_or_junior]++}}

# 處理完成,因此打印出比賽..對於每個數組
END {for (belt中的顏色) print "俱樂部有", Belt[color], color, "Belts "

for (senior_or_junior in Student) print "The Club has", Student[senior_or_junior], Senior_or_junior, "students"}
BEGIN部分設定域分隔符號為#,初始化兩個然後處理文件,先給陣列為顏色,使用循環語句比對$1之一是否相等隊列元素(黃色、橙色或紅色),如果匹配,則匹配順序元素將運行總數保存進隊列。 END部分列印瀏覽結果,對每個資料庫使用循環語句並列印

收集awk的一些技巧方案

awk [opion] 'awk_script' input_file1 [input_file2 ...] awk的常用選項選項有:
① - F fs : 使用fs輸入記錄的欄位分隔符,如果省略該選項,wak使用環境變數IFS的值。
② -f filename : 從檔案檔案名稱讀取awk_script。
③ - v var=value : 為awk_script設定變數。

1、刪除重複的行 

#awk '!a[]++'


2、將資料檔案中的每個字的第一個字母變成大寫

dingyi@backup:~$ 貓測試
linux萬歲! ! ! 
我是一個cuer


dingyi@backup:~$ awk ',1,1); sub(/^./,toupper(第一),); print }' test
Linux萬歲! ! !
我是一個cuer

awk請教

是下面文件一,文件二
  $cat file1
00001       20
00002       31
00003       04
00004       56
0 0005       94
00006       73
00007       25
00008       86
00009       19
00010       52

$貓咪檔案2
00001       20
00007        20
00007        20
00007       56
00010       52

怎樣的shell才能使用file1、file2兩個檔案的$2不同的話,全域$0?
注意:比較兩份文件的$2的時候,一定要第一列相同的情況下才比較

請大蝦執教

li2002 2003-9-11 08:57 
 
awk 請教

不就是找出不同行嗎?
cat file1 file2|sort |uniq -u

death-100

paste file1 file2|awk '{if(($1==$3)&&($2!=$4))print$0}'

bjgirl 2003-9-11 09:38 

 !/bin/ksh

sort -n file1>nf
sort -n file2>mf
paste nf mf|awk '$1=$3 {print}'|awk '$2!=$4 {print}'

rm nf mf

結果結果結果:
00002 31 00002 32
00004 04 00004 56
00007 56 00007 28
00010 94 00010 520010 52101
 
awk 請教

回一樓,最近在學awk啦,而且你那樣得到的數值是
00002 31
00002 32
00003 04

00005 94

00006 730 00010 52
00010 52
而我要的是

00002 31  32

00007 25  28

 

 


二樓沒有數值的



awk 請教

三樓的答案是錯的,我要是結果是

[color=red]00002 31 32 

00007 25 28¢

admirer 2003-9-12 00:45 

 

awk 請教

這不是一個簡單的paste能解決的問題,而是一個以關鍵字連接的問題!

[code]sort file1 >f1;sort file2 >f2; join -j1 1 f1 f2|awk '$2 != $3'

00002 31 32
00007 25 28[/code]

30 


 
awk 請教

[quote][i]原帖由"yoof"]join -j1 1 f1 f2  請版主解釋[/quote 發表:[/i]

第一個域為索引鍵,連接f1,f2兩個檔案

檔案處理 

1.有文件gz.txt(薪資) 

4367422926350133100 張三1250.00 

4367422926351220178 李四1300.0025364625


蘇五丙1340.00 

4367422926351220178 孫六月1390.00 

… … 

要求:按帳號19位、姓名8位、薪資8位來排列,且如姓名不足8位在之後補足,薪資不足8位則在薪水之前補。同時要求去除薪水為0的名單,沒有帳號在前補19位空格,並輸出工資總數加以核對,處理後應如下排列: 

4367422926350133100張三1250.00 

436742蘇五丙1340.00 

4367422926351220178孫六月1390.00 

………… 

awk程式: 

#------------------------------ ------ 

#shgz1.sh 

sblank=" " 

awk '$nf!="0"' $1 > tmp.txt #刪除薪資0的人數 

awk '
printf("%-19.19s%-8.8s%8.2fn","'"$kk"'",$1,$2)> #如果沒有帳號補上空格 

else
printf("%-19.19s%-8.8s%8.2fn",$1,$2,$3)> 

>' tmp.txt > $2 
/9 -9]/
sum=sum+$nf 



end
system("rm tmp.txt") 

printf("the sum is% tmp.txt") 

總數 

>' $2 


在awk中呼叫系統變數必須用單引號,如果是雙引號,則表示字串
Flag=abcd
awk '{print '$Flag'}' 結果為abcd
awk 'awk '{print '$Flag'}' 結果為abcd
awk 'awk '{print '$Flag'}' 結果為abcd
awk ' {print "$Flag"}' 結果為$Flag







如何刪除配對之間的內容但不含配對行

 

我有這樣一個文件:
Query=4567879
    sequence jkaskdjgkjasgasa;jghsafgkas
    jfaklslgjdla;;gsdakl;gd

                                                                           score     E
PUT-ASD-WEETED-001
PUT-ASD-WEQER5-001789
>PUT-ASD-WEETED -001 
SDAGDSDS
>PUT-ASD-WEQER5-001789
DSGTSDTEW
.....
......
......
是這樣的,我想刪除
從score   第一個以>開頭的中間所有的行,但不包括score     E行和第一以>開頭的行

sed '/score     E/,/^>/d' urfile 
肯定是不行的,把score     E行和第一以>開頭的行也刪除了?
該怎麼寫呢?
其中要處理的檔案中含有多個score     E和第一以>開頭的之間的行,均刪除。


awk -v p=1 '/score/{p=0}/>/{p=1}p' urfile    


網!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:awk命令詳解下一篇:awk命令詳解