awk 指令碼學習 二

2021-08-19 20:11:48 字數 2844 閱讀 3678

示例檔案:

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 ...