シェルプログラミング3剣士awk

awkツールの紹介

Awkは、主にlinux / unixの下でテキストとデータを処理するために使用されるプログラミング言語であり、linux / unixの下のツールです。データは、標準入力、1つ以上のファイル、または他のコマンドの出力から取得できます。
Awkのテキストとデータの処理方法:ファイルを1行ずつ、デフォルトでは最初の行から最後の行までスキャンし、特定のパターンに一致する行を探して、これらの行に対して必要な操作を実行します。
Awkは、著者の姓の最初の文字を表します。その作者は、アルフレッド・アホ、ブライアン・カーニハン、ピーター・ウェインバーガーの3人です。
GawkはawkのGNUバージョンで、Bell LabsとGNUのいくつかの拡張機能を提供します。
以下に紹介するawkはGNUのgawkに基づいていますが、Linuxシステムではawkがgawkにリンクされているため、awkはすべて以下に紹介します。

awkツールの役割

1. awkは、ファイルとデータの処理に使用されます。これは、Unixライクなプログラミング言語のツールです。2。Web
サイトの訪問、IPの訪問などの統計に使用できます。3
。サポート条件の判断whileループのサポート

3つのawk構文フォーマット

awkオプション「コマンド部分」ファイル名
注意:
シェル変数を引用するには、二重引用符を使用して
一般的なオプションを導入します。-
Fはフィールド分離記号を定義し、デフォルトのセパレーターはスペースです
-vは変数を定義して値を割り当てます

3.1 awkの一般的に使用される内部変数

変数 変数の説明 備考
$ 0 現在の処理ラインの全ライン
$ 1、$ 2、$ 3…$ n 間隔記号で区切られたファイル内のさまざまなフィールド awk -F: '{print $ 1、$ 3}'
NF 現在の処理ラインのフィールド数 awk -F: '{print NF}'
$ NF 最後の行 $(NF-1)は最後から2番目の列を意味します
FNR / NR 現在の処理ラインのライン番号
FS スペーサーを定義 'BEGIN {FS = ":"}; {print $ 1、$ 3}'
OFS デフォルトのスペースである出力フィールドセパレータを定義します 'BEGIN {OFS = "\ t"}; $ 1、$ 3}を印刷する
RS レコードセパレータ、デフォルトの改行を入力してください 'BEGIN {RS = "\ t"}; {print $ 0}'
ORS 出力レコードセパレータ、デフォルトの改行 'BEGIN {ORS = "\ n \ n"}; {print $ 1、$ 3}'

3.2一般的に使用される内部変数の例

# awk -F: '{print $1,$(NF-1)}' 1.txt
# awk -F: '{print $1,$(NF-1),$NF,NF}' 1.txt
# awk '/root/{print $0}' 1.txt
# awk '/root/' 1.txt
# awk -F: '/root/{print $1,$NF}' 1.txt 
root /bin/bash
# awk -F: '/root/{print $0}' 1.txt      
root:x:0:0:root:/root:/bin/bash
# awk 'NR==1,NR==5' 1.txt 
# awk 'NR==1,NR==5{print $0}' 1.txt
# awk 'NR==1,NR==5;/^root/{print $0}' 1.txt 
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

4つの高度なawkの使用

4.1 1.フォーマットされた出力printとprintf

print函数		类似echo "hello world"
# date |awk '{print "Month: "$2 "\nYear: "$NF}'
# awk -F: '{print "username is: " $1 "\t uid is: "$3}' /etc/passwd


printf函数		类似echo -n
# awk -F: '{printf "%-15s %-10s %-15s\n", $1,$2,$3}'  /etc/passwd
# awk -F: '{printf "|%15s| %10s| %15s|\n", $1,$2,$3}' /etc/passwd
# awk -F: '{printf "|%-15s| %-10s| %-15s|\n", $1,$2,$3}' /etc/passwd

awk 'BEGIN{FS=":"};{printf "%-15s %-15s %-15s\n",$1,$6,$NF}' a.txt

%s 字符类型  strings			%-20s
%d 数值类型	
占15字符
- 表示左对齐,默认是右对齐
printf默认不会在行尾自动换行,加\n

4.2 awk変数の定義

# awk -v NUM=3 -F: '{ print $NUM }' /etc/passwd
# awk -v NUM=3 -F: '{ print NUM }' /etc/passwd
# awk -v num=1 'BEGIN{print num}' 
1
# awk -v num=1 'BEGIN{print $num}' 
注意:
awk中调用定义的变量不需要加$

おすすめ

転載: blog.csdn.net/cenjeal/article/details/108423806