awk コマンド
コマンド ツールは、ファイル内の各行をスキャンして、コマンド ラインで指定されたものと一致するパターンを探します。一致が見つかった場合は、次のプログラミング ステップに進みます。一致するものが見つからない場合は、次の行まで処理を続けます。
文法:
awk [option] 'pattern{action}' file...
awk [选项] '模式{动作}' 文件...
options はオプション パラメータを意味し、pattern はパターンを意味し、action はアクションを意味し、awk はテキスト形式とフォーマットされた結果の出力に適しているため、最も一般的に使用されるアクションは print です。
一般的なオプションは次のとおりです。
-F 指定分割符,不指定默认以空格分割,示例: awk -F ':' '{print $1}' file.txt (或awk -F: '{ print $1 }' /etc/passwd) 使用-F 指定分隔符为冒号
モデル:
模式其实就表示条件,表示当满足什么条件后做对应的action动作
NR==2 表示取第2行
一般的に使用されるアクションは次のとおりです。
print :表示输出打印,示例: awk '{print $1}' file.txt # action为print,表示打印第1个变量值
awk コマンドもファイルを行ごとに処理します. 1 行が処理された後, 次の行が処理されます. awk はユーザーが指定した区切り文字に従って動作します. 区切り文字が指定されていない場合, デフォルトではスペースで区切られます.各行が組み込み
変数に分割された後のデータをマップします。
一般的に使用される組み込み変数:
$0 :表示分割符分割后的全部列,其实就是一整行
$1 :表示分割符分割后的第1列
$2 :表示分割符分割后的第2列
......同理
NF(Number of fields) 分割后,字段总数,字段总数应该是一个整数,如 '{print NF }' 打印出7
$NF :表示分割符分割后的最后一列,加上$号取值就表示最后一列了
$(NF-1) :表示分割符分割后的倒数第二列
$(NF-2) :表示分割符分割后的倒数第三列
......同理
NR(Number of records):当前行数,行号,通常在模式中使用,如 NR==2表示第2行
デモの例:
[root@master ~]# cat /etc/passwd > file.txt #以passwd为例子
[root@master ~]# awk -F ':' '{print $0}' file.txt #指定分割符是冒号,输出全部列,其实就是一整行
[root@master ~]# awk -F ':' '{print}' file.txt #等价于上一行
[root@master ~]# awk -F ':' '{print $1}' file.txt #指定分割符是冒号,输出打印第1列
[root@master ~]# awk -F ':' '{print $1 $2}' file.txt #指定分割符是冒号,输出打印第1列和第2列,但是第1列和第2列连在一起了
rootx
binx
daemonx
.....
[root@master ~]# awk -F ':' '{print $1,$2}' file.txt #第1列和第2列加一个逗号,输出显示会默认空格隔间
[root@master ~]# awk -F ':' '{print "first:",$1,"----","secods:",$2}' file.txt #print可以加格式化输出,但要使用双引号括起来
[root@master ~]# awk -F ':' '{print $NF}' file.txt # $NF表示最后一列
[root@master ~]# awk -F ':' '{print $(NF-1)}' file.txt # $(NF-1)表示倒数第2列
[root@master ~]# awk -F ':' 'NR==5{print $1}' file.txt #表示awk找到第5行,输出打印 第1列
[root@master ~]# awk -F ':' 'NR==1,NR==5{print $1}' file.txt #这是表示awk找到第1到第5行,输出打印 第1列
[root@master ~]# awk -F ':' '{print NR,$0}' file.txt #NR就是行号,输出打印全部行并带行号