February 22, 2022
テキスト処理のコマンド 'AWK' の基本的使い方
Variable
mark |
mean |
$0 |
行全部 |
${n} |
n 列目 |
NR |
行数 |
NF |
桁数 |
FNR |
処理行 |
NR%{n}=={} |
スキップ |
Option
option |
mean |
-f |
ファイル指定 |
-F |
デリミタ ’,’ ’ ’ |
-v |
変数 ‘key=val’ |
File を指定して実行
echo | awk -f <file_name>
File の中身表示
awk '{print $0}' <file_name>
File の 1 列目表示
awk '{print $1}' <file_name>
スキップ
awk 'NR%3で割って1余る==1' <file_name>
1 列目の合計と平均
awk '{sum+=$1} END {print sum,sum/NR}' <file_name>
1 列目が 2 の行を表示
awk '{if( $1 == 2 ){ print $0 }}' <file_name>
ls コマンドを整形
ls -l | awk '{ print $3, $4, $9 }'
ls -l | awk '$9=="<search_word>" { print $3, $4, $9 }'
引数
# hoge.awk
{ print $1 * k }
echo "1" | awk -f hoge.awk -v 'k=2'
空白とカンマの両方を区切り文字
printf "a,b c" | awk -F '[, ]' '{ print $1, $2, $3 }'
Match
awk -v 'str=e f' 'match( $0, str ){ print $0 }' huga.txt
CSV 出力
# hoge.awk
BEGIN { OFS = "," }
{
for (i=1; i<=NF; i++) {
printf "\"%s\"", $i;
if( i < NF ) printf "%s",OFS
}
}
END { printf "\n" }
echo "a b,c d" | awk -f hoge.awk
スクリプトで使用
BEGIN {
while ( (getline var < ファイル名) > 0 ) {
print var
}
}
echo "abc" > abc.txt
$ echo "" | awk -f hoge.awk
合計・平均・分散・標準偏差を求める
hoge.awk
{
sum += $1
square_sum += $1 * $1
}
END {
if ( NR == 0 ) exit
average = sum / NR
variance = square_sum / NR - average * average
std_dev = sqrt( variance )
print " 合計 :", sum
print " 平均 :", average
print " 分散 :", variance
print "標準偏差:", std_dev
}
# fuga,txt
50
60
70
70
100