💭
✍️ 1行目を除いて5行ごとに保存する小ワザ
テキストファイルを扱っていて、1行目にヘッダーがあるケースってよくありますよね。
ヘッダー行はそのまま残しておきたいけど、データ部分は5行おきに抜き出したい…そんなときに使えるワンライナーをご紹介します。
使うコマンド
# ヘッダーを除いてから、5行ごとに1行だけ抽出するパターン
tail -n +2 input.txt | awk 'NR%5==1' > output.txt
-
tail -n +2 input.txt- ファイルの2行目以降を全部表示します。
- 1行目(ヘッダー)をスルーするイメージ。
-
awk 'NR%5==1'- パイプで流れてきた2行目以降のデータを、行番号 (
NR) を5で割った余りが1の行だけ出力します。 - 具体的には、元ファイルの2行目→パイプ後の1行目、7行目→パイプ後の6行目…といった感じで5行おきにキャッチ。
- パイプで流れてきた2行目以降のデータを、行番号 (
-
> output.txt- 抜き出した結果を
output.txtにまとめて保存します。
- 抜き出した結果を
どういうときに役立つ?
- 大きめのログファイルをダイジェスト表示したいとき
- CSVデータのサンプリング抽出
- バッチ処理前に動作検証用のテストデータを手早く作りたいとき
本格的にスクリプトを書かなくても、シェルだけでサクッとデータ整形できるのがイイところ。Unix系コマンドの組み合わせで、ちょっとしたお掃除やサンプリングが楽になるので、ぜひ覚えておいてください!
Tip:
5の部分を変えれば、3行ごと、10行ごと…と自由自在にサンプリングできます。ぜひいろいろ試してみてくださいね。
Discussion