「シェル」awk コマンド

1.オーク

Awk の仕組み:

デフォルトで区切り文字としてスペースまたはタブキーで区切られたテキストを行ごとに読み取り、区切られたフィールドを組み込み変数に保存し、モードまたは条件に従って編集コマンドを実行します。

sed コマンドは行全体を処理するためによく使用されますが、awk は行を複数の「フィールド」に分割して処理する傾向があります。awk情報の読み込みも一行ずつ読み込み、print dayの機能により実行結果を印刷表示することができます。awk コマンドを使用する過程で、論理演算子を使用し"&&"表示"与"、"| |"表示"或"、"!"表示"非"、単純な数学演算を実行できます。

awk コマンドの形式:

awk   选项    '模式或条件  [操作]'   文件1     文件2  ...
awk   -f      脚本文件       文件1    文件2     ...

Awk の一般的な組み込み変数 (直接使用可能) は次のとおりです。

キャラクター 説明
FS 列区切り文字。テキストの各行のフィールド区切り文字を指定します。デフォルトはスペースまたはタブです。与"-F"作用相同
NF 現在処理されている行のフィールド个数
NR 現在処理中行的行号(通常)
$0 現在処理されている行の整行内容
$n 現在処理されている第n个行(列n)のフィールド
ファイル名 処理中のファイル名
RS 行区切り文字。awk がファイルからデータを読み取るとき、RS の定義に従ってデータを多数のレコードに分割し、処理のために一度に 1 つのレコードのみを読み取ります。デフォルト値は「\n」です

2. awk はテキストを行ごとに出力します

1. すべてを出力します。

awk '{print}' shicao1.txt           //输出所有内容
awk '{print $0}' shicao1.txt     //输出所有内容

ここに画像の説明を挿入
2. 4~6行目の内容を出力

awk 'NR==4,NR==6 {print $0}' shicao1.txt

ここに画像の説明を挿入
3. 4~6行目の内容を出力(論理積)

awk 'NR>=4&&NR<=6 {print $0}' shicao1.txt

ここに画像の説明を挿入
4. 4行目と6行目の内容を出力(論理和)

awk 'NR==4||NR==6{print}' shicao1.txt

ここに画像の説明を挿入
5. すべての奇数/偶数行の内容を出力します。

awk '(NR%2)==1 {print $0}'  shicao1.txt    //输出所有奇数行的内容
awk '(NR%2)==0 {print $0}'  shicao1.txt    //输出所有偶数行的内容

ここに画像の説明を挿入
5. 偶数行をすべて出力し、行番号を表示します。

awk '(NR%2)==0 {print NR,$0}'  shicao1.txt

ここに画像の説明を挿入
6. root で始まる行を出力します。

awk '/root/ {print $0}' /etc/passwd

ここに画像の説明を挿入
7. 10行目の内容を表示しない

awk 'NR!=10{print $0}' shicao1.txt

ここに画像の説明を挿入

8. 出力は bash で終わります。

awk '/bash$/ {print}' /etc/passwd

ここに画像の説明を挿入
9. ファイルを処理する前。ファイルの処理によって実行される操作、END 操作

awk 'BEGIN {x=0}; /nologin$/ {x++;print x,$0}; END {print x}' /etc/passwd

ここに画像の説明を挿入

3. Awk はフィールドごとにテキストを出力します

awk -F: '/^root/ {print $1}' /etc/passwd               //各行の最初のフィールドを出力します(スペースまたはタブで区切られています)

awk -F: '/^root/ {print $3}' /etc/passwd               //各行の 3 番目のフィールドを出力します (スペースまたはタブで区切られます)

awk -F: '/^root/ {print $1,$3}' /etc/passwd         //各行の最初と 3 番目のフィールドの内容を出力します

awk -F: '/^root/ {print $1, 3 , 3,3 , NF}' /etc/passwd     //各行の最初、3番目、最後のフィールドの内容を出力します
ここに画像の説明を挿入

awk -F: '$3<5 {print $0}' /etc/passwd                  //値が 5 未満の 3 番目のフィールドの内容を出力します

awk -F: '$3<5 {print $3, $1}' /etc/passwd
ここに画像の説明を挿入

awk -F: '!($3>10) {print $3,$1}' /etc/passwd                 //値が 5 未満の 3 番目のフィールドの内容を出力します
ここに画像の説明を挿入

awk 'BEGIN {FS=":"};{if($3>=1000){print}}' /etc/passwd                   //まず BEGIN の内容を処理し、次にテキストの内容を出力します
ここに画像の説明を挿入

awk -F ":" '{max=($3>=$4)?$3:$4;{print max}}' /etc/passwd //($3>$4)?$3:$4; 三項演算子、最初の                       If 3 つのフィールドの値が 4 番目のフィールドの値以上である場合、3 番目のフィールドの値を max に割り当て、それ以外の場合は 4 番目のフィールドの値を max に割り当てます。ここに画像の説明を挿入

awk -F ":" '{print NR,$0}' /etc/passwd   //各行の内容と行番号を出力し、レコード処理後のNR値に1を加算しますここに画像の説明を挿入

awk -F ":" '$7~"/bash"{print $1}' /etc/passwd                      //コロンで区切られた行の最初のフィールドを出力し、7 番目のフィールドには /bash ここに画像の説明を挿入
awk -F ":" '($1 ~"root")&&(NF==7){print $1,$2}' /etc/passwd //ルートを含む行の 1 番目と 2 番目のフィールドと、1 番目のフィールドの 7 フィールドを出力ここに画像の説明を挿入
awk -F ":" ' ($7!="/bin/bash")&&($7!="/sbin/nologin"){print}' /etc/passwd //出力 7 番目のフィールドは / bin /bash ではなく、/ のすべての行でもありませんsbin/ノログインここに画像の説明を挿入

4. パイプラインと二重引用符を介してシェル コマンドを呼び出します。

awk '{print NR}' shicao1.txt                     // 行番号を出力

awk '{print NR,$0}' shicao1.txt
ここに画像の説明を挿入
ここに画像の説明を挿入

free -m | awk '/Mem:/ {print int($3/($3+$4)*100)“%”}’ //                   現在のメモリ使用率を表示します
ここに画像の説明を挿入

awk 'BEGIN {n=0 ; while ("w" | getline) n++ ; {print n-2}}' //         w コマンドを呼び出し、それを使用してオンライン ユーザーの数をカウントします
ここに画像の説明を挿入

CPU 使用率:
ここに画像の説明を挿入
現在の CPU 使用率を確認します: top | awk '{print $0}' (動的)
ここに画像の説明を挿入
1 回だけ実行します: top -b -n1
ここに画像の説明を挿入

CPU 使用率を確認します:
top -b -n1 | awk '/%Cpu/ {print $8}'
top -b -n1 | awk -F, '/%Cpu/ {print $4}' | awk '{print $1}
top - b -n1 | awk -F, '/%Cpu/ {print $4}' | awk '{print 100-$1"%"}'
ここに画像の説明を挿入

ルート ディレクトリの使用状況を表示します。

DF | awk '{print $5}'

DF | awk '$NF==“/”{print $5}'
ここに画像の説明を挿入

cat /proc/uptime | awk -F, '{print $1}'  
date -d "$(cat /proc/uptime | awk -F. '{print $1}') second ago"    //开机时长  

ここに画像の説明を挿入

cat shicao2.txt | 並べ替え | uniq -c //統計

方法1:猫 shicao2.txt | awk '{a[$1]++}; END{for(i in a){print i,a[i]}} '
方法2:cat shicao2.txt | 並べ替え | ユニーク -c
ここに画像の説明を挿入
ここに画像の説明を挿入

エコー「ABCD」 | awk 'BEGIN{OFS=“,”}; {print $0}'
echo “ABCD” | awk 'BEGIN{OFS=“,”}; {$1=$1; $0 を印刷します}'

$1=$1 は、$0 の再割り当て、つまりフィールド $1... の変更をアクティブにするために使用されます。フィールド数 NF は、awk に $0 の値を再計算するよう促します。これは通常、$0 のときに行われます。 OFS変更後に出力する必要がある
ここに画像の説明を挿入

awk 'BEGIN{a[0]=1; a[1]=2; a[2]=3; print a[1]}'
awk 'BEGIN{a[0]=1; a[1]=2; a[2]=3; print a[0]}'
awk 'BEGIN{a[0]=1; a[1]=2; a[2]=3; print a[2]}'
awk 'BEGIN{a[“abc”]=10; a["def"]=20; a[“xyz”]=30; print a[“abc”]}
awk 'BEGIN{a[“abc”]=10; a["def"]=20; a[“xyz”]=30; print a[“xyz”]}'
awk 'BEGIN{a[“abc”]=10; a["def"]=20; a[“xyz”]=30; print a[“def”]}'
awk 'BEGIN{a[0]=1; a[1]=2; a[2]=3; for(i in a){print i,a[i]}}'

PS1: BEGIN のコマンドは 1 回だけ実行されます
PS2: awk 配列の添字には数値または文字列を使用できますが、文字列には二重引用符を使用する必要があります
ここに画像の説明を挿入

5. 概要:

awk  选项 '条件 {操作}'


awk  -F '分隔符'  'NR==X {print $n}'
                  != > >= < <= || &&
                  '/字符串或正则/ {....}'
                  'Sn~"字符串" {...]'
                  !~ == != > >= < <=


awk  'BEGIN{...}; 条件{...}; END{...}'
      BEGIN{
    
    ...};处理文件前的操作
      条件{
    
    ...};按照条件处理文件行内突的操作
      END{
    
    ...}  处理完文件所有行内容后的操作

おすすめ

転載: blog.csdn.net/Wanghwei17/article/details/130682912