awk呼叫shell命令

2021-07-07 03:04:30 字數 1786 閱讀 9026

awk可以用getline或system來呼叫shell的命令

1 getline

通過在awk內使用管道,可以把shell命令的輸出傳送給awk

$ awk 'begin'

sun mar 8 22:21:52 2009

順便說一下getline的其他用法.

getline除了可以通過管道從shell命令裡讀取資料

外,它還可以從標準輸入(用"-"指定從標準輸入讀入,或者如果命令列沒有任何輸入檔案且不用重定向符"<"指定檔案,預設也是從標準輸入讀)和檔案裡讀取數

據;如果getline後面沒有指定變數,則讀取的資料會放到$0裡面

$ awk 'begin'

hello, for note <==這一行是從鍵盤輸入的

hello, for note <==這一行是awk的print $0 輸出的

$ cat sed.test

hello

$ awk 'begin'

hello

$ awk 'begin'

hello

hello

如果讀取成功,getline返回1;如果讀到檔案結束符,getline返回0;如果發生錯誤,例如打不開檔案,getline返回-1. 所以,getline可以用於while迴圈中

$ cat grep.test

hello

myboy

third

fourth

$ awk 'begin }'

hello

myboy

third

fourth 2 

system

system的呼叫形式是system(cmd).system的返回值是cmd的退出狀態.如果要獲得cmd的輸出,就要和getline結合使用

$ awk 'begin }'

total 14

-rw-r--r-- 1 administrator none 2 mar 3 20:20 4

-rw-r--r-- 1 administrator none 0 feb 28 19:49 4]]

-rw-r--r-- 1 administrator none 87 mar 5 20:22 awk.test

-rwxr-xr-x 1 administrator none 409 mar 3 22:24 bc.test

-rwxrwxrwx 1 administrator none 411 mar 3 22:23 bc.test.bak

-rw-r--r-- 1 administrator none 48 feb 21 21:06 func.test

-rw-r--r-- 1 administrator none 25 feb 27 21:37 grep.test

-rw-r--r-- 1 administrator none 6 feb 27 20:59 kk

-rw-r--r-- 1 administrator none 5 mar 8 15:11 log.test

-rw-r--r-- 1 administrator none 0 feb 27 21:22 orld

-rw-r--r-- 1 administrator none 75 mar 8 12:14 perl.test

-rw-r--r-- 1 administrator none 6 mar 6 20:22 sed.test

-rw-r--r-- 1 administrator none 12 feb 27 21:32 sed.write

sh: 0: command not found

from: 

shell 六 awk命令學習

呼叫awk類似sed 目前的linux 都是用的gawk,兩者現在互相等同了。awk中的執行語句,類似c c 在shell命令輸入 awk f 域分隔符 awk 程式段 輸入檔案 awk程式段插入指令碼檔案,然後通過awk命令呼叫它awk f awk指令碼檔案 輸入檔案 通過 f 呼叫awk指令碼檔...

awk 程式中使用 Shell 命令

a.語法 awk output 指令 shell 接受的命令 如 print 1,2 sort k 1 b.語法 shell 接受的命令 awk input 指令 如 ls getline 注 awk input 指令只有 getline 乙個.awk output 指令有 print,printf...

awk命令基本處理 shell

awk 逐行掃瞄輸入 可以是檔案或管道等 awk 將讀入的記錄分割成數個字段 1 0 表示整條記錄,第乙個字段放入髮量 1 中,第二個放入髮量 2 中。2 字段分隔符可以通過選項 f 指定,否則使用預設的分隔符,通常為空格或tab。argc 命令列引數個數 實際就是輸入檔案的數目加 1 argind...