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
awk#出力行番号awk #指定セパレータawk
awk -F:
awk -F#tを区切り記号として出力awk-F: .文字列マッチング、正規表現マッチング、~モード開始、//中はモードawk
awk
awk
awk
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 $3 == 0 && $6 == “ESTABLISHED” || NR == 1 {print “%-20s %-20s %-20s %-20s %s
”, NR, FNR, $4, $5, $6}
netstat.txt BEGIN{FS = “:”} {print $1, $3, $6}
/etc/passwd -Fと同等
awk -F:
{print $1, $3, $6}
/etc/passwd 複数の区切り文字を指定できます
awk -F
[; : ,]
{print $1, $3, $6}
OFS="t"/etc/passwd $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”)}`