シェルコマンドawkの使用:
1.スクリプトを使用して、システムの現在のメモリ使用率のパーセンテージを出力します:
#!/bin/bash
[centos@centos shell]$ free -m
total used free shared buff/cache available
Mem: 1819 508 130 11 1180 1130
Swap: 2047 368 1679
[centos@centos shell]$ vim useCache.sh
echo "このスクリプトを使用して、現在のシステムメモリ使用率を確認できます"
use=$(free -m | grep Mem: | awk '{print $3}')
total=$(free -m | grep Mem: | awk '{print $2}')
useper=$(expr $use \* 100 / $total)
echo "システムの現在のメモリ使用率: "
echo ${useper}%
[centos@centos shell]$ chmod +x useCache.sh
[centos@centos shell]$ ./useCache.sh
このスクリプトを使用して、現在のシステムメモリ使用率を確認できます
システムの現在のメモリ使用率:
27%
[centos@centos shell]$
2.スペースで区切って、各行にフィールドがいくつあるかを示します
[centos@centos shell]$ vim file
aaaaaaaa bbbbb ccccc dddddd eeeee fffffff
bbbbbbbbbb aaaaa ccccccc ddddddddd eeeeeeeeee
ccccccc bbbbbbb eeeeee hhhhhhhhh
eeeeee ffffff
ffffff
[centos@centos shell]$ awk '{print NF}' file
6
0
5
0
4
0
3
0
2
0
1
3.スペースで区切って、ファイル内の4つ以上のフィールドを含む行を表示します
[centos@centos shell]$ awk 'NF>4 {print}' file
aaaaaaaa bbbbb ccccc dddddd eeeee fffffff
bbbbbbbbbb aaaaa ccccccc ddddddddd eeeeeeeeee
[centos@centos shell]$
4.各行の行番号を表示します
[centos@centos shell_study]$ awk '{print NR, $0}' file
1 aaaaaaaa bbbbb ccccc dddddd eeeee fffffff
2
3 bbbbbbbbbb aaaaa ccccccc ddddddddd eeeeeeeeee
4
5 ccccccc bbbbbbb eeeeee hhhhhhhhh
6
7 fffff hhhhhhh yyyyyyyy
8
9 eeeeee ffffff
10
11 ffffff
[centos@centos shell_study]$ awk 'NR==5 {print}' file
ccccccc bbbbbbb eeeeee hhhhhhhhh
5.最初の行を表示しない
[centos@centos shell_study]$ route -n | awk 'NR!=1{print}'
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.150.1 0.0.0.0 UG 100 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.150.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
[centos@centos shell_study]$ route -n | awk 'NR>1{print}'
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.150.1 0.0.0.0 UG 100 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.150.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
6.ファイル内の root を含む行をマッチ
[centos@centos shell_study]$ awk -F: '/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
7.ファイル内の root を含む行をマッチしない
[centos@centos shell_study]$ awk -F: '!/root/' /etc/passwd
8.ファイル内の空の行の行番号をマッチ
[centos@centos shell_study]$ awk '{if($0~/^$/)print NR}' file
2
4
6
8
10
[centos@centos shell_study]$ awk -F: '{if($3>100)print "LARGE";else print "SMALL"}' /etc/passwd