awkモードマッチング学習ノート(180813)

4703 ワード

学習参考資料:https://coolshell.cn/articles/9070.html 1. まずnetstatコマンドでテストファイルnetstatを取得する.txt(netstat - Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships) 2. #出力$awk {print “%-8s %-8s %-8s %-8s %-22s %-15s
”, $1,$2,$3,$4,$5,$6 }
netstatをフォーマットtxt 3. #私のリストにはLISTENは存在しないので、私の作者とは違いawk $3 == 0 $6 == “;LISTEN” netstat.txt 4. #条件フィルタawk $3>0 {print $0} netstat.txt 5. #ヘッダが必要で、組み込み変数を導入し、excelテーブルであれば、最初の行の内容であり、各列名awk $3 == 0 && $6 == “LISTEN” || NR == 1 netstat.txt

NR==1を外すと無くなります


awk $3 == 0 && $6 == “LISTEN” netstat 6. #さらに複雑な点は、出力awk $3 == 0 && $6 == “ESTABLISHED” || NR == 1 {print “%-20s %-20s $s
”, $4, $5, $6}
netstatをフォーマットする.txt
  • #出力行番号awk $3 == 0 && $6 == “ESTABLISHED” || NR == 1 {print “%-20s %-20s %-20s %-20s %s
    ”, NR, FNR, $4, $5, $6}
    netstat.txt
  • #指定セパレータawk BEGIN{FS = “:”} {print $1, $3, $6}/etc/passwd
  • -Fと同等


    awk -F: {print $1, $3, $6}/etc/passwd

    複数の区切り文字を指定できます


    awk -F [; : ,]
  • #tを区切り記号として出力awk-F:{print $1, $3, $6} OFS="t"/etc/passwd
  • .
  • 文字列マッチング、正規表現マッチング、~モード開始、//中はモードawk $6 ~ /FIN/ || NR == 1 {print NR,$4,$5,$6} OFS="t"netstat.txt

  • もう一つ例を見る


    awk $6 ~ /WAIT/ || NR == 1 {print NR,$4,$5,$6} OFS = ”\t” netstat.txt

    もう一つ例を見る


    awk /tcp/ netstat.txt 11. #’/FIN|TIME/’でFINまたはTIME awk $6 ~ /FIN | TIME/ || NR == 1 {print NR,$4,$5,$6} OFS="t"netstat.と一致する.txt 12. #パターン取反awk $6 !~ /WAIT/ || NR == 1 {print NR,$4,$5,$6} OFS="t"netstat.txt

    もう一つ例を挙げる


    awk $1 !~/tcp/ || NR == 1 {print NR,$4,$5,$6} OFS = “\t” netstat.txt

    それでもいい


    awk ! /WAIT/ netstat.txt 13. #ファイルを分割awk NR!=1{print > $6} netstat.txt 14. #指定列はファイルawk NR !=1 {print $4,$5,$6} netstatに出力.txt 15. #複雑な点、awkはif else文awk NR!=1{if($6 ~ /TIME | ESTABLISHED/)print > “1.txt”; else if ($6 ~ /CONNECTED/)print “2.txt”; else print > “3.txt”} netstatと結合している.txt 16. #すべてのファイルのサイズの合計$ls G_を計算します.24hCFvsG_24hCM.DE_down.xls G_24hCFvsG_24hCM.DElist_down.txt G_24hCFvsG_24hCM.DElist.txt G_24hCFvsG_24hCM.DElist_up.txt G_24hCFvsG_24hCM.DE_up.xls G_24hCFvsG_24hCM.DE.xls G_24hCFvsG_24hCM.Differential_analysis_results.xls ls -l *xls *txt | awk {sum += $5} END {print sum} 21361 17. # awk結合forループ文$awk NR!=1{a[$6]++;} END {for (I in a ) print i “,” a[i]; } netstat.txt 18. #各ユーザーのプロセスがどれだけのメモリを占めているかを統計します$ps aux|awk NR!=1{a[$1]+=$6;} END {for (i in a) print i“,” a[i]”KB”;} 19.BEGIN{ここでは実行前の文},END{ここではすべての行を処理した後に実行する文},{ここでは各行を処理する際に実行する文},次はawkコマンドファイルであり,このスクリプトを実行する方法は$awk-fcalである.awk students_score.txt、そして./cal.awk students_score.txt等#!/bin/awk -f # before run BEGIN{ math = 0 english = 0 computer = 0
    `print "NAME NO. MATH ENGLISH COMPUTER TOTAL
    "` `print "------------------------------------
    "`
    }
    -#running
    {
    math+=$3 english+=$4 computer+=$5 print "%-6s %-6s %4d %8d %8d
    ", $1, $2, $3, $4, $5, $3+$4+$5
    }
    # runninng later END { print "-------------------------------------------------
    "
    print " TOTAL: %10d %8d %8d
    ",math, english,computer
    print "AVERAGE: %10.2f %8.2f %8.2f
    ", math/NR, english/NR,computer/NR
    }
    20. #-vパラメータとENVIRONを使用して、ENVIRONの環境変数を使用するにはexport $ x=5
    $ y=10
    $ export y
    $ echo $x $y
    5 10
    $awk -v val = $x {print $1, $2, $3, $4+val, $5+ENVIRON[“y”]} OFS="t"students_が必要です.score.txt 21. #ファイルの長さが50より大きい行awk length>50 students_を見つけます.score.txt 22. #クライアントIP$netstat-ntu|awk {print $5}|cut-d:-f 1|sort|uniq-c|sort
    23. # 99
    $
    seq 9|sed'Hを接続数で表示します.g’ | awk -v RS=’’ {for(i=1;i<=NF;i++) print(“%dx%d=%d%s”,i, NR, i*NR, i==NR?”
    ”:”\t”)}`