2018-05-06 GNU awk 2

19198 ワード

1、awk変数
  • 内蔵変数FS(field separate):フィールド区切り文字を入力し、デフォルトは空白文字OFS(output field separate):フィールド区切り文字を出力し、デフォルトは空白文字RS(record separate):レコード区切り文字を入力し、デフォルトはリターン改行ORS:レコードの区切り文字を出力し、デフォルトはターンバック改行NF(number field):現在の行に何列のデータがあるか(これは各行で設定された分割子に基づいて再計算され、デフォルトの分割子は任意の連続する複数の空白子である)
  • .
    awk '{print NF}' /etc/fstab :                 ,       ,        
    awk '{print $NF}' /etc/fstab :             
    

    NR(number record):現在処理されている行が何行目であるかを示すレコードの数.行番号の印刷に使用できる.FNR:現在処理されている行は、現在処理されているファイルの何行目のawk '{print FNR}' /etc/fstab /etc/inittab FILENAME:現在ファイル名ARGC:コマンド行パラメータの個数ARGV:配列であり、コマンド行によって与えられた各パラメータが保存されている
    [root@centos6 yum.repos.d]#awk 'BEGIN{print ARGC,ARGV[0]}' /etc/fstab /etc/issue  ---awk   
    3 awk
    [root@centos6 yum.repos.d]#awk 'BEGIN{print ARGC,ARGV[1]}' /etc/fstab /etc/issue   ---/etc/fstab   
    3 /etc/fstab
    [root@centos6 yum.repos.d]#awk 'BEGIN{print ARGC,ARGV[2]}' /etc/fstab /etc/issue   ---/etc/issue   
    3 /etc/issue
    
  • カスタム変数(1)-v var=value(2)プログラムで
  • を直接定義する.
    [root@centos6 yum.repos.d]#awk -v test="hello gawk" 'BEGIN{print test}' 
    hello gawk
    

    まとめ:awkの変数参照は$ではありません.ここではshellの変数参照とは異なり、awkの文字列に二重引用符を付けなければなりません.そうしないと変数として扱われます.
    2、printfコマンド
    フォーマット出力:printf「FORMAT」,item 1,item 2,...(1)FORMAT(2)が自動的に改行しないことを指定する必要があり、改行制御子を明示的に与える必要がある.(3)FORMATでは、後のitemごとにフォーマット記号を指定する必要がある.%G:数値%sを科学カウント法または浮動小数点で表示:%s:文字列を表示---最も一般的な%u:符号なし整数%%:%自己修飾子を表示:%3.1 f:3は制御後に印刷する内容の幅を表す;1は小数点以下の精度を表します-:左揃え(デフォルト右揃え)%-15 s、15は幅を定義し、印刷する列が15文字を占めることを示します.-左揃えを定義します+:数値を表示する正負の記号%+d
    [root@centos6 yum.repos.d]#cat /etc/fstab 
    /dev/sda1    /boot     ext4  defaults 0 0
    /dev/sda2    /      ext4   defaults   0  0
    /dev/sda3      /app   ext4   defaults  0 0 
    [root@centos6 yum.repos.d]#awk '{printf "%s",$1}' /etc/fstab ---       
    /dev/sda1/dev/sda2/dev/sda3
    [root@centos6 yum.repos.d]#awk '{printf "%s
    ",$1}' /etc/fstab ---
    /dev/sda1 /dev/sda2 /dev/sda3 [root@centos6 yum.repos.d]#awk -F: '{printf "%-10s %-10d
    ",$1,$3}' /etc/passwd --- root 0 bin 1 daemon 2 adm 3 lp 4 sync 5 shutdown 6 halt 7 mail [root@centos6 yum.repos.d]#awk -F: '{printf "username:%s uid:%d
    ",$1,$3}' /etc/passwd ----pritf , , "username:%s $1 ,uid:%d $3 username:root uid:0 username:bin uid:1 username:daemon uid:2 username:adm uid:3 username:lp uid:4 [root@centos6 yum.repos.d]#awk -F: '{printf "username: %-15s uid: %d
    ",$1,$3}' /etc/passwd username: root uid: 0 username: bin uid: 1 username: daemon uid: 2 username: adm uid: 3 username: lp uid: 4

    3、算術オペレータ
    算術オペレータ:x+y,x-y,x*y,x/y,x^y,x%y-x:負数+xに変換数値付与オペレータ:=,+=,-=,*=,*=,/,%=,^=++,--比較オペレータ:=,!=,>,>=,パターンマッチング:~:左にマッチング右が含まれているかどうか!~:論理オペレータに一致しないかどうか:&&、または、非!例
    [root@centos6 yum.repos.d]#awk 'BEGIN{print i++}' --- awk i      ,     i=0
    0
    [root@centos6 yum.repos.d]#awk 'BEGIN{print ++i}'  ---      
    1
    [root@centos6 yum.repos.d]#df|awk '$0 ~ /^\/dev\/sd/ {print $1,$5}'    ---~        
    /dev/sda2 3%
    /dev/sda1 4%
    /dev/sda3 1%
    [root@centos6 yum.repos.d]#df |awk '$0~ "^/dev/sd" {print $1,$5}'
    /dev/sda2 3%
    /dev/sda1 4%
    /dev/sda3 1%
    [root@centos6 yum.repos.d]#awk -F: '$0 ~ "root"{print $0}' /etc/passwd  
    ---        root,          
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    [root@centos6 yum.repos.d]#awk -F: '$0 ~ "^root"' /etc/passwd 
    ---     action,   {}     ,        
    [root@centos6 yum.repos.d]#awk '$0 !~ "root"' /etc/passwd
    ---     root   
    [root@centos6 yum.repos.d]#awk -F: '$3==0' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    ---        0     
    [root@centos6 yum.repos.d]#awk -F: '$3>=0 && $3<=500{printf "systemuser:%s
    ",$1}' /etc/passwd --- systemuser:root systemuser:bin systemuser:daemon systemuser:adm [root@centos6 yum.repos.d]#awk -F: '$3==0 || $3 >=1000 {print $1}' /etc/passwd --- root nfsnobody [root@centos6 yum.repos.d]#awk -F: '!($3==0){print $1}' /etc/passwd --- , ($3==0) bin daemon adm lp
  • 三目式selector?if-true-expression:if-false-expression例
  • [root@centos6 yum.repos.d]#awk -F: '{$3>=500?usertype="common user":usertype="sysuser or rootuser";printf "%s %s
    ",usertype,$1}' /etc/passwd [root@centos6 yum.repos.d]#awk -F: '$3>=500?usertype="common user":usertype="sysuser or rootuser"{printf "%s %s
    ",usertype,$1}' /etc/passwd , , 。

    4、awkのpattern
    PATTERN:pattern条件に従って、一致する行をフィルタリングし、処理を行う(1)未指定:空モード、一致する各行(2)/regular expression/:一致できる行のみを処理するには、/で囲む必要がある
    awk '/^UUID/{print $1}' /etc/fstab
    awk '!/^UUID/{print $1}' /etc/fstab
    

    (3)relational expression:リレーショナル式、結果が「真」である場合にのみ真が処理されます:結果は0以外の値、空でない文字列の偽:結果は空の文字列または0の値
    [root@centos6 yum.repos.d]#awk '!0' /etc/issue  
    ---    0,  
    CentOS release 6.9 (Final)
    Kernel \r on an \m
    [root@centos6 yum.repos.d]#awk '" "' /etc/issue
    ---    
    CentOS release 6.9 (Final)
    Kernel \r on an \m
    [root@centos6 yum.repos.d]#awk '!1' /etc/issue  
       0    
    [root@centos6 yum.repos.d]#awk '""' /etc/issue
               
    

    (4)line ranges:行範囲startline,endline:/pat 1/,/pat 2/は直接数値フォーマットを与えることをサポートしていません
    awk -F: '/^root\>/,/^nobody\>/{print $1}' /etc/passwd
    awk -F: '(NR>=10&&NR<=20){print NR,$1}' /etc/passwd
    

    (5)BEGIN/ENDモードBEGIN{}:ファイル内のテキストの処理を開始する前に一度だけEND{}:テキスト処理が完了した後に一度だけ実行する例
    [root@centos6 yum.repos.d]#awk -F: '$NF=="/bin/bash"{print $1,$NF}' /etc/passwd
    root /bin/bash
    dufu /bin/bash
    [root@centos6 yum.repos.d]#awk -F: '$NF ~ "bash$"{print $1,$NF}' /etc/passwd
    root /bin/bash
    dufu /bin/bash
    [root@centos6 yum.repos.d]#awk -F: 'BEGIN{print "user          uid
    ------------------------------"}{printf "%-15s| %-10d
    ",$1,$3}END{print "-----------------------
    end file"}' /etc/passwd user uid ------------------------------ root | 0 bin | 1 daemon | 2 adm | 3 lp | 4 sync | 5 shutdown | 6 halt | 7 mail | 8 uucp | 10 operator | 11 games | 12 gopher | 13 ftp | 14 nobody | 99 vcsa | 69 saslauth | 499 postfix | 89 sshd | 74 dufu | 500 ntp | 38 tcpdump | 72 apache | 48 rpc | 32 dbus | 81 rpcuser | 29 nfsnobody | 65534 ----------------------- end file [root@centos6 yum.repos.d]#seq 10|awk '++i' ---i , 0,0+1=1, 1 2 3 4 5 6 7 8 9 10 [root@centos6 yum.repos.d]#seq 10|awk 'i++' --- i=0, 2 3 4 5 6 7 8 9 10 [root@centos6 yum.repos.d]#seq 10|awk 'i=!i' 1 3 5 7 9 , ,i=0, , , ,i , , , ,i , , , , [root@centos6 yum.repos.d]#seq 10|awk '!(i=!i)' --- [root@centos6 yum.repos.d]#seq 10|awk '{i=!i;print i}' 1 0 1 0 1 0 1 0 1 0

    5、1-10から奇数と偶数を印刷する方法のまとめ
       :echo  
    [root@centos6 yum.repos.d]#echo {1..10..2}
    1 3 5 7 9
    [root@centos6 yum.repos.d]#echo {2..10..2}
    2 4 6 8 10
       :seq
    [root@centos6 yum.repos.d]#seq -s " " 1 2 10
    [root@centos6 yum.repos.d]#seq -s " " 2 2 10
       :sed
    [root@centos6 yum.repos.d]#seq 10|sed -n '1~2p'
    [root@centos6 yum.repos.d]#seq 10|sed -n '2~2p'
       :awk
    [root@centos6 yum.repos.d]#seq 10|awk 'i=!i'
    [root@centos6 yum.repos.d]#seq 10|awk '!(i=!i)'
    

    6、awkのaction
    一般的なaction分類(1)Expressions:算術,比較式など(2)Control statements:if,whileなど(3)Componentstatements:組合せ文(4)input statements(5)output statements:printなど
    7、awk制御文
  • if-else構文:if(condition){statement;...}else{statement}if(condition 1){statement 1}else if(condition 2){statement 2}else{statement 3}カッコの中に条件判断、カッコの中に実行される動作使用シーン:awkで取得した行全体またはフィールドの条件判断例
  • [root@centos6 yum.repos.d]#awk -F: '{if($3>=1000){print $1,$3}}' /etc/passwd
    nfsnobody 65534
    [root@centos6 yum.repos.d]#awk -F: '{if($NF=="/bin/bash"){print $1,$3}}' /etc/passwd
    root 0
    dufu 500
    [root@centos6 yum.repos.d]#awk '{if(NF>5){print $0}}' /etc/fstab 
    [root@centos6 yum.repos.d]#awk -F: '{if($3>=500){printf "commonuser:%-15s
    ",$1}else{printf "systemuser: %-15s
    ",$1}}' /etc/passwd systemuser: root systemuser: bin systemuser: daemon systemuser: adm [root@centos6 yum.repos.d]#awk -F: '{if($3>=500)printf "commonuser:%-15s
    ",$1;else printf "systemuser: %-15s
    ",$1}' /etc/passwd --- [root@centos6 yum.repos.d]#df |awk -F% '/^\/dev\/sd/{print $1}'|awk '$NF>=80{print $1,$5}' [root@centos6 yum.repos.d]#awk 'BEGIN{test=100;if(test>90){print "very good"}else if(test>60){print "good"}else{print "no pass"}}' very good [root@redhat7 script]#echo {1..10}|awk '{i=1;while(i<=NF){ if($i%2==0){print $i,"oushu"}else {print $i,"jishu"};i++}}'
  • while while循环文法:while(condition){statement;...}小かっこの中は条件判断で、大かっこの中はこのような条件の下で実行する动作条件の“真”で、循环に入ります;条件「偽」、ループ使用シーンを終了:1行内の複数のフィールドを1つずつ類似処理するときに配列内の各要素を1つずつ処理するときに使用する例
  • .
    [root@centos6 yum.repos.d]#awk 'BEGIN{print length("xxxxxxx")}'
    7
    ---length(),         ,          ,    
               ,          。
    [root@redhat7 rules.d]#awk '/^[[:space:]]*linux16/{i=1;while(i<=NF){print $i,length($i);i++}}' /etc/grub2.cfg 
    linux16 7
    /vmlinuz-3.10.0-693.el7.x86_64 30
    root=UUID=1ef020e7-9a49-4a5d-ae32-fb03caef3f29 46
    ro 2
    crashkernel=auto 16
    rhgb 4
    quiet 5
    LANG=en_US.UTF-8 16
    linux16 7
    /vmlinuz-0-rescue-fe8e32bbb81547ccb85916d1fe2a32ff 50
    root=UUID=1ef020e7-9a49-4a5d-ae32-fb03caef3f29 46
    ro 2
    crashkernel=auto 16
    rhgb 4
    quiet 5
    [root@redhat7 rules.d]#awk '/^[[:space:]]*linux16/{i=1;while(i<=NF){if(length($i)>=10){print $i,length($i)};i++}}' /etc/grub2.cfg 
    /vmlinuz-3.10.0-693.el7.x86_64 30
    root=UUID=1ef020e7-9a49-4a5d-ae32-fb03caef3f29 46
    crashkernel=auto 16
    LANG=en_US.UTF-8 16
    /vmlinuz-0-rescue-fe8e32bbb81547ccb85916d1fe2a32ff 50
    root=UUID=1ef020e7-9a49-4a5d-ae32-fb03caef3f29 46
    crashkernel=auto 16
    [root@centos7 ~]#cat f1.txt
    1 2 3 4 5 6 7 8 9 10
    10 11 12 13 14 15 16 17 18 19 20
    [root@centos7 ~]#awk '{i=1;sum=0;while(i<=NF){sum+=i;i++};print sum,i}' f1.txt         
    55 11
    66 12
    [root@centos7 ~]#awk '{i=1;sum=0;while(i<=NF){sum+=$i;i++};print sum,i}' f1.txt  ---       ,  sum    ,      
         sum     0, 0     
    55 11
    165 12
    [root@centos7 ~]#awk '{i=1;while(i<=NF){sum+=$i;i++}}END{print sum}' f1.txt   ---END     ,  sum     ,   0, 
             ,sum          ,       
                        
    220
    [root@centos7 ~]#awk '{i=1;while(i<=NF){sum+=$i;i++};print sum,i}END{print sum}' f1.txt    ---         , sum  
               ,                   。
    55 11
    220 12
    220
    
  • 1 1から100の和を計算する方法のまとめ:
  •    
    [root@redhat7 system]#echo {1..100}|tr ' ' '+'|bc
    5050
       
    [root@redhat7 system]#seq -s "+" 100|bc
    5050
       
    [root@redhat7 system]#sum=0;for i in {1..100};do let sum+=i;done;echo $sum
    5050
       
    [root@redhat7 script]#i=1,sum=0;while [ $i -le 100 ];do let sum+=i;let i++;done;echo $sum
       
    5050
    [root@redhat7 script]#for((i=1,sum=0;i<=100;i++));do let sum+=i;done;echo $sum
    5050
       
    [root@redhat7 script]#awk 'BEGIN{sum=0;i=1;while(i<=100){sum+=i;i++};print sum}'
    5050
    
  • forループ構文:for(expr 1;expr 2;expr 3){statement;...}一般的な使い方:for(変数初期化;条件判断;変数の修正式){for-body}特殊な使い方:配列内の各要素構文を遍歴できる:for(var in array)例
  • [root@redhat7 script]#awk '/^[[:space:]]*linux16/{for(i=1;i<=NF;i++){print $i,length($i)}}' /etc/grub2.cfg 
    
  • 性能比較
  • [root@redhat7 script]#time (awk 'BEGIN{for(i=1;i<=100000;i++){sum+=i};print sum}')
    5000050000
    
    real    0m0.012s
    user    0m0.010s
    sys 0m0.002s
    [root@redhat7 script]#time (sum=0;for i in {1..100000};do let sum+=i;done;echo $sum)
    5000050000
    
    real    0m0.521s
    user    0m0.099s
    sys 0m0.422s
    [root@redhat7 script]#time (seq -s "+" 100000|bc)
    5000050000
    
    real    0m0.039s
    user    0m0.040s
    sys 0m0.003s
    

    awkの演算速度が最も速いことがわかります
  • breakおよびcontinue、next
  • [root@redhat7 script]#awk 'BEGIN{sum=0;for(i=1;i<=100;i++){if(i%2==0)continue;sum+=i};print sum}'
    2500
    [root@redhat7 script]#awk 'BEGIN{sum=0;for(i=1;i<=100;i++){if(i==66)break;sum+=i}print sum}'
    2145
    [root@redhat7 script]#awk 'BEGIN{sum=0;for(i=1;i<=100;i++){if(i==66)continue;sum+=i}print sum}'   
    4984
    [root@redhat7 script]#awk -F: '{if($3%2!=0)next;print $1,$3}' /etc/passwd
    root 0
    daemon 2
    lp 4
    shutdown 6
    mail 8
    games 12
    ftp 14
    systemd-network 192
    sshd 74
    zhang 1000
    apache 48
    

    まとめ:前の2つはbashの中の使い方と同じで、continueは本輪を飛び出して、breakは全体の循環を飛び出して、nextは早めに本行の処理を終えて直接次の行の処理(awkが自分の行の循環を持っている)に入ります.
    8、awk配列
    awkの配列は関連配列、すなわちインデックスの下に任意の文字列としてマークされ、数字ではなくインデックスを表す.配列内の各要素を巡回するには、forループfor(var in array)を使用します.varは配列arrayの各インデックスを巡回します.例
    [root@redhat7 app]#awk -F: '{line[$7]++}END{for(i in line){print i,line[i]}}' /etc/passwd
    /bin/sync 1
    /bin/bash 3
    /sbin/nologin 16
    /sbin/halt 1
    /sbin/shutdown 1
              line     ,           ,
      line    1,i     line       ,  i    
        ,line    ,      ,         0, 
            ,  1,      ,line[i]        
              ,    ,  line  1。
    [root@redhat7 app]#netstat -nat|awk '/^tcp/{state[$NF]++}END{for(i in state){print i,state[i]}} '
    LISTEN 5
    ESTABLISHED 2
    [root@redhat7 app]#cat f1
    aaaaa
    ddddd
    ccccc
    aaaaa
    bbbbb
    ccccc
    ddddd
    bbbbb
    [root@redhat7 app]#awk '!line[$0]++' f1
    aaaaa
    ddddd
    ccccc
    bbbbb
                         ,           ,  sort uniq 。
             :  line        ,        line 
          0,               ,      
         ,line      0,     ,     ,   
      ,   1,       1,     action,     
       ,          。line     1,     。 
      ,line     1,  2,          ,  line 
       0,      ,   ,      ,       
             。
          :!      ++     ,          ,   ++
    [root@redhat7 app]#netstat -nt|awk -F "[[:space:]:]+" '/^tcp/{ip[$6]++}END{for(i in ip){print i,ip[i]}}'|sort -k2 -nr|head -n 10
    -F "[[:space:]:]+"               ,       awk  ip    
    

    9、awk関数
    数値処理:rand():0と1の間の乱数を返します.
    [root@redhat7 app]#awk 'BEGIN{print rand()}'
    0.237788
    [root@redhat7 app]#awk 'BEGIN{print rand()}'
    0.237788
    [root@redhat7 app]#awk 'BEGIN{print rand()}'
    0.237788
    [root@redhat7 app]#awk 'BEGIN{srand();print rand()}'
    0.0522516    ---   srand()    ,    0-1     
     ,       ,       ,      
    [root@redhat7 app]#awk 'BEGIN{srand();print rand()*100}'
    26.8591  ---  100     
    [root@redhat7 app]#awk 'BEGIN{srand();print int(rand()*100)}'
    [root@redhat7 app]#awk 'BEGIN{srand();for (i=1;i<=10;i++){print int(rand()*100)}}'   --    10    
    22   ---   int     
    

    文字列処理:•length([s]):指定した文字列の長さを返し、括弧の中に文字列がある場合は二重引用符を使用し、変数であれば使用しない•sub(r,s,[t]):t文字列を検索し、rはパターンマッチングの内容を表し、最初のマッチングの内容をsに置き換える
    [root@redhat7 app]#echo "2008:08:08 08:08:08" | awk 'sub(/:/,"-",$1)'    ---        ,            ,     ,      - 
    2008-08:08 08:08:08
    

    •gsub(r,s,[t]):t文字列を検索し、rはパターンマッチングの内容を表し、すべてsが表す内容に置き換える
    [root@redhat7 app]#echo "2008:08:08 08:08:08" | awk 'gsub(/:/,"-",$0)'
    2008-08-08 08-08-08
    

    •split(s,array,[r]):rを区切り記号として文字列sを切断し、切断後の結果をarrayが表す配列に保存します.最初のインデックス値は1、2番目のインデックス値は2、...
    [root@redhat7 app]#netstat -nt|awk '/^tcp\>/{split($5,ip,":");count[ip[1]]++}END{for(i in count){print i,count[i]}}'
    

    解釈:入力分割子が指定されていないため、デフォルトは空白文字、パターンマッチング、tcpで始まる行にマッチングし、コロンを分割子として5列目をカットし、カットの結果をipという配列に保存し、カットの1列目の値をip[1]というインデックスが1の配列要素に保存し、次に、この配列要素をcount配列のインデックス値として定義すると、ipアドレスごとに出現する回数を表示することができます.
  • 男子学生と女子学生の総点数平和級成績
  • を計算した.
    [root@redhat7 app]#cat f1
    mage 100 male
    wang 90 male
    zhang 80 female
    li 100 female
    [root@redhat7 app]#awk '{total[$3]+=$2;num[$3]++}END{for(name in total){print name,total[name],total[name]/num[name]}}' f1
    [root@redhat7 app]#awk '{if($3 == "male"){msum+=$2;mnum++}else{fsum+=$2;fnum++}}END{printf "msum=%d  mavg=%.2f
    fsum=%d favg=%.2f
    ",msum,msum/mnum,fsum,fsum/fnum}' f1
  • カスタム関数フォーマット:function name(parameter,parameter,...){statements return expression}例:
  • #cat fun.awk
    function max(v1,v2) {
    v1>v2?var=v1:var=v2
    return var
    }
    BEGIN{a=3;b=2;print max(a,b)}
    #awk –f fun.awk
    

    10、awkスクリプト
    awkでshellコマンドsystemコマンドを呼び出すスペースはawkの文字列コネクタであり、systemでawkの変数を使用する必要がある場合はスペースで区切るか、awkの変数以外はすべて「」で参照します.
    awk BEGIN'{system("hostname") }'
    awk'BEGIN{score=100; system("echo your score is " score) }'
    

    外部ホストssh接続に失敗したipアドレスの数をsshログファイルで見つけるには、接続に失敗した回数が5回以上ある場合は、ファイアウォールに置いてsshでホストを接続することを禁止します.方法1
    [root@centos6 app]#vim awk.sh 
      1 #!/bin/bash
      2 #
      3 while true;do
      4 cat /var/log/secure|awk '/Failed/{ip[$(NF-3)]++}END{for(i in ip){if(ip[i]>=5){system("iptables -A INPUT -s "i" -j REJECT")}}}'
      5   sleep 5
      6  done
    

    方法2
    [root@centos6 app]#cat jianchassh.sh 
    #!/bin/bash
    #
    while true;do
     cat /var/log/secure |grep "Failed"|awk '{ip[$(NF-3)]++}END{for(i in ip){print i,ip[i]}}'> /app/f6
    cat /app/f6 |while read file;do
             ip=`echo $file|cut -d ' ' -f1`
             num=`echo $file|cut -d ' ' -f2`
             if [ $num -ge 5 ];then
                   iptables -A INPUT -s $ip -j REJECT
              fi
               done
               sleep 2m
        done
    

    awkスクリプト
    #cat f1.awk
    {if($3>=1000)print $1,$3}
    #awk -F: -f f1.awk /etc/passwd
    #cat f2.awk
    #!/bin/awk –f   --  awk     
    #this is a awkscript
    {if($3>=1000)print $1,$3}
    #chmod +x f2.awk
    #f2.awk –F: /etc/passwd
    

    awkスクリプトへのパラメータの転送
    #cat test.awk
    #!/bin/awk –f
    {if($3 >=min && $3<=max)print $1,$3}
    #chmod +x test.awk
    #test.awk -F: min=100 max=200 /etc/passwd