awkとsed

awk

awk -f xxx.awk <ファイル> xxx.awk:{ print $3 }

或いは

awk '{ print $3 }' <ファイル>

awk '{ i = length($0); print i }' <ファイル> 内容の長さ

awk '{ i = index($0, "awk"); print i}' <ファイル> awkを検索

awk 'BEGIN { i = 1 } { n = split($0, a, " "); while (i <= n) {print a[i]; i++;} }' <ファイル> 内容を単語単位で表示

※ファイル内容:test awk command

awk -F, '{print $1,$2+$3+$4}' <ファイル>

※ファイル内容:

Andy,12,3,7

Ben,20,5,19

$0 レコード全体

NF フィールド数 $NF 最後のフィールド

NR フィールドが何番目 行番号

# 一回だけ

BEGIN {

print "-- start --"

FS = "-" # 区切り設定

}

# < > <= >= == !=

NR < 5 {

print NR ":" $0

}

# && || !

(NR == 2) || (NR > 5) {

...

}

# ~ !~ :正規表現

$2 ~ /ABC-[23]/ {

...

}

# 一回だけ

END {

print "-- end --"

}

BEGIN {

sum = 0

}

{

sum += $3

}

END {

print sum

}

組み込み関数

printf("-10%s %5d\n", $1, $3)

printf("%f, %d\n", rand(), int($3/3))

length($1) > 5 {

print substr($4, 5, 3)

}

制御文

if (NR % 5 == 0) {

...

} else {

...

}

for (i = 0; i < int($3/10); i++) {

printf("*")

}

i = 0

while (i < int($3/10)) {

printf("*")

i++

}

配列

# サンプル1

color = "color1 color2 color3"

split(color, colors)

for (i in colors) {

print colors[i]

}

# サンプル2

{

sales[$1] += $3

}

END {

for (name in sales) {

print name ":" sales[name]

}

}

関数

function func(n) {

return int(n / 100) * 0.1

}

{

printf("rate:%0.1f\n", func($3))

}

sed

sed -i.bak '3d' <ファイル> 上書き

sed -f xxx.sed <ファイル>

・全行を表示

sed '3d' <ファイル> 3行目を削除

sed '3!d' <ファイル>

sed '1d;3d' <ファイル>

sed '1,3d' <ファイル>

sed '1~2d' <ファイル>

sed '$d' <ファイル> 最後行削除

sed '3,$d' <ファイル> 3行目~最後を削除

sed '/i$/d' <ファイル> 見つかった行を削除

・対象行を表示

sed -n '3p' <ファイル> 3行目のみ

sed -n '1p' <ファイル> ⇒ sed -n '1p;1q' <ファイル> 効率よく

sed -n '/xxx/p' <ファイル> grep 'xxx' <ファイル>

sed -n 's/aaa/bbb/gp' <ファイル>

sed -n 's/^aaa/bbb/p' <ファイル> 先頭aaaをbbbに変換

sed '3q' <ファイル> 3行目まで

sed '3i\abc' <ファイル>

sed -e '1i\start' -e '$a\end' -e '/^$/d' <ファイル>

sed 'y/t/T/' <ファイル>

sed 'y/to/TO/' <ファイル> 1文字ずつ

sed 's/apple/ABC/g' <ファイル>

sed 's/apple/ABC/ig' <ファイル>

sed 's/[aA]pple/ABC/g' <ファイル>

sed 's/[0-9]/【&】/' <ファイル> 1⇒【1】

sed 's/\([0-9]\) \(.*\)/\2【\1】/' <ファイル> 1⇒【1】且つ最後へ移動