awk, sed, shスクリプト(簡単なメモ)
awk
例文:3項目が$Mと一致する行を出力
% awk '($3 == '$M') {print $0" "}' all.dat >> out.txt
ちっぷす
-
書式 : awk_コマンド_対象ファイル
-
コマンドは、’’で囲む。
-
コマンドの中に条件文を入れ、条件文は()で囲む。
-
コマンドの中に手続きを入れ、手続きは{}で囲む。
-
プリント(手続きの一つ)の中に普通の文字を入れるには、””で囲む。
-
コマンド中に外部の『メタキャラクタ』を入れたい時は、’’で囲む(一度閉じて、開く感じ)。
-
条件判定の書式 < > <= >= == !=
sed
以下、幾つかサンプルを記載。
% sed '3s/aa/ZZ/g' a.txt
3行目のaaをZZに置換する。最初の3が無ければ、全ての行。
最後のgが無ければ、1個置換したらその行は終了。
% sed '3s/\(.*\)/neko/' a.txt
3行目を消して、nekoにする。
3sを/aa/sにするとaaを含む行を全てnekoにする。
% sed '2,4d' a.txt
2,3,4行目を削除。'3d'なら3行目を削除。
% sed -n '2,4p' a.txt
2,3,4行目のみを出力。'3p'なら3行目のみを出力。
% sed '/aa/,/^c/d' a.txt
上のdやpの例文を、行番号指定から条件指定に変更した物。「aaを含む行」から「cで始まる行」までを削除。'/^#/d'なら#で始まる行を全て削除。
% sed 's/[ -~]//g' a.txt | sed '/^$/!=' | sed '/^$/d'
2バイトフォントが入っている場所を探す。英文ファイル用。
% sed -i .bak 's/aa/ZZ/g' a.txt
-iオプションでファイルを直接編集する。.bakは、バックアップファイルを作成する。-iが無ければ標準出力(画面に表示)するだけ。
shスクリプト (csh, tcsh)
変数への代入
set n = ""
ループ文
foreach L( 2 3 4 )
(中略)
end
コマンドの引数への代入(ここでは、1,2を代入してる)
echo 1 2 | a.out
計算
@ m = $L + 10
お手軽100回ループ
@ i = 1
while ($i <= 100)
echo $i
@ i ++
end
★おまけのパール
% perl -ple 's/ +/,\t/g' file.txt
みたいな感じのコマンドでスペースをコンマ+タブに変換できるようです(394 K原)。