最近覚えたコマンドライン処理の小ネタ
スクリプト書かないでコマンドだけでテキストファイルの処理ができるといろいろ楽。
最近覚えた使い方をメモメモ。
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
こんな感じで探したいキーワードの前後の行をチェックして、行数を確認してから切り出す。