示例檔案:
column檔案:
xdr_file(針對column檔案生成相應的資料,列分隔符為|)
col1
col2
col3
col4
col5
col6
312|250|0512|||
320|250|0512|||
314|250|0512|||
319|250|0512|||
314|250|0512|||
314|250|0512|||
328|250|0512|||
321|250|0512|||
316|250|0512|||
315|250|0512|||
321|250|0512|||
327|250|0512|||
317|250|0512|||
317|250|0512|||
目標檔案:
每行轉化成:
col1:312
col2:250
.......
命令如下:
awk -f '|' 'argind==1 argind==2 }' test1 test2
生成的檔案如下:
**********xdrrecord1*****==
col1:312
col2:250
col3:0512
col4:
col5:
col6:
**********xdrrecord2*****==
col1:320
col2:250
col3:0512
col4:
col5:
col6:
**********xdrrecord3*****==
col1:314
col2:250
col3:0512
col4:
col5:
col6:
**********xdrrecord4*****==
col1:319
col2:250
col3:0512
col4:
col5:
col6:
**********xdrrecord5*****==
col1:314
col2:250
col3:0512
col4:
col5:
col6:
**********xdrrecord6*****==
col1:314
col2:250
col3:0512
col4:
col5:
col6:
**********xdrrecord7*****==
col1:328
col2:250
col3:0512
col4:
col5:
col6:
**********xdrrecord8*****==
col1:321
col2:250
col3:0512
col4:
col5:
col6:
**********xdrrecord9*****==
col1:316
col2:250
col3:0512
col4:
col5:
col6:
**********xdrrecord10*****==
col1:315
col2:250
col3:0512
col4:
col5:
col6:
**********xdrrecord11*****==
col1:321
col2:250
col3:0512
col4:
col5:
col6:
**********xdrrecord12*****==
col1:327
col2:250
col3:0512
col4:
col5:
col6:
**********xdrrecord13*****==
col1:317
col2:250
col3:0512
col4:
col5:
col6:
**********xdrrecord14*****==
col1:317
col2:250
col3:0512
col4:
col5:
col6:
**解釋:
1.fnr:為當前檔案的記錄數
2.
argind==1 當檔案為第乙個檔案時,將檔案讀入陣列col中
e.g 有兩個檔案a 和b
awk ' if(argind==2)}' a b
檔案處理的順序是先掃瞄完a檔案,再掃瞄b檔案
nr 已經讀出的記錄數
fnr 當前檔案的記錄數
上面的例子也可以寫成這樣:
awk 'nr==fnr nr > fnr' a b
輸入檔案a和b,由於先掃瞄a,所以掃瞄a的時候必然有nr==fnr,然後掃瞄b的時候,fnr從1開始計數,而nr則接著a的行數繼續計數,所以nr > fnr
awk向指令碼傳遞引數(二)
命令列引數的乙個重要限制是它們在begin過程中是不可用的。也就是說,直到首行輸入完畢以後它們才可用。為什麼?這是乙個easy混亂的部分。從命令列傳遞的引數就好像檔名稱一樣被處理。賦值操作知道這個變數 假設它是乙個檔名稱 被求值時才進行。參閱以下的指令碼。該指令碼將變數n設定為乙個命令列引數。awk...
shell指令碼以及awk學習
awk filenameawk end filename if e root temp then echo yes else echo no fisort n filenamegrep r 123 root temptemp txt mktemp tempx.cat dev urandom stri...
常用awk指令碼
begin else if 2 2 end 說明 按照某列的值進行分組求和。注意 awk指令碼中中間 塊本身就是是對檔案中每行都進行處理,需要使用while i此檔案命名為abc.awk 則執行方式是awk f abc.awk data 如果awk檔案不複雜,建議直接用awk命令列執行,如 awk ...