導入
awk は、GNU プロジェクトによって開発された強力なテキスト処理ツールです。これは主に、入力 (通常はテキスト ファイル) を読み取り、特定の条件に従って各行を照合し、一致した行に対して指定された操作を実行するために使用されます。
基本的な使い方
awk
基本的な使い方は以下の通りです。
# 格式
$ awk 动作 文件名
# 示例
$ awk '{print $0}' demo.txt
上記の例では、処理対象となるのはテキスト ファイルdemo.txt
です。awk
前の単一引用符の内側には中括弧があり、各行の処理アクションが含まれていますprint $0
。この中には現在行を表すprint
printコマンドがあるので$0
、上記コマンドの実行結果は各行をそのまま印刷することになります。
次に、最初に標準入力 (stdin) を使用して上記の例を示します。
$ echo 'this is a test' | awk '{print $0}'
this is a test
上記のコードでは、print $0
標準入力がthis is a test
再印刷されます。
awk
各行はスペースとタブに基づいて複数のフィールドに分割され、 、 を使用して最初$1
のフィールド、2 番目のフィールド、3 番目のフィールドなどを表します。$2
$3
$ echo 'this is a test' | awk '{print $3}'
a
上記のコードでは、は3 番目のフィールド$3
を表します。this is a test
a
以下では、例として、/etc/passwd
ファイルを として保存しますdemo.txt
。
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
このファイルのフィールド区切り文字はコロン ( ) であるため、パラメータを:
使用して区切り文字をコロンとして指定する必要があります。-F
次に、その最初のフィールドを抽出できます。
$ awk -F ':' '{ print $1 }' demo.txt
root
daemon
bin
sys
sync
変数
$ +
フィールドを表す数値に加えて、awk
他の変数も多数提供されます。
この変数はNF
現在の行にフィールドがいくつあるかを示すため、$NF
最後のフィールドを表します。
$ echo 'this is a test' | awk '{print $NF}'
test
$(NF-1)
最後から 2 番目のフィールドを表します。
$ awk -F ':' '{print $1, $(NF-1)}' demo.txt
root /root
daemon /usr/sbin
bin /bin
sys /dev
sync /bin
上記のコードでは、print
コマンド内のカンマは、出力時に 2 つの部分を区切るためにスペースが使用されることを意味します。
変数は、NR
現在処理されている行を示します。
$ awk -F ':' '{print NR ") " $1}' demo.txt
1) root
2) daemon
3) bin
4) sys
5) sync
上記コードにおいて、print
コマンド内で文字をそのまま出力する場合はダブルクォートで囲む必要があります。
awk
その他の組み込み変数は以下の通りです。
FILENAME:当前文件名
FS:字段分隔符,默认是空格和制表符。
RS:行分隔符,用于分割每一行,默认是换行符。
OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
OFMT:数字输出的格式,默认为%.6g。