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】且つ最後へ移動