最近覚えたコマンドライン処理の小ネタ

スクリプト書かないでコマンドだけでテキストファイルの処理ができるといろいろ楽。
最近覚えた使い方をメモメモ。

tsvファイルを特定のフィールドの値で分割する
1 hoge 123
2 fuga 456
3 hoge 111
4 fuga 333

こんなファイルがあったとする。ファイル名はdata.txt

awk '{file=$2 ".txt"; print > $file; close($file)}' data.txt

フィールドの2番目の値に拡張子を付けてファイル名として、そのファイルにprintの出力をリダイレクトする。上のデータの場合はhoge.txtとfuga.txtができる。
close()しているのは、開くファイルが多くなり過ぎるとエラーになるため。

行数が多いファイルの特定範囲を抜き出す

数百万行とかあるログファイルをエディタで開くのはつらいので、特定範囲を切り出してから開くようにしてる。

sed -ne '1000,1100p' hoge.txt > fuga.txt

大抵の場合は

grep -n -B 100 -A 100 keyword hoge.txt

こんな感じで探したいキーワードの前後の行をチェックして、行数を確認してから切り出す。