のーずいだんぷ

主に自分用メモですが、もしかしたら誰かの役に立つかもしれません

シェルスクリプトでファイルに行を挿入したい

概要

CLIでログデータを簡易的に処理する際、headerがなかったので該当のログデータにヘッダー行を挿入したかった。

結論

以下で可能。
複数ファイルがある場合のケースを記載。

#!/bin/bash

IFS=$'\n'
header=`cat ./header.txt`
for file in *.log
do
        sed -i 2i$header $file
done

補足として...
IFSInput Field Separaterの略で、今回の例に限らず基本メトリクスデータは空白による行列分割を行っているので、 これを変更しないと処理中に分割して解釈されるので少し中止したいところ。

ハマりどころ

今回はsed -iによって、解決できたので問題とならなかったが (sed等の上書きモードが使用できない等の)場合によっては、以下のようにしたくなると思う。

#仮にsedに上書きモード(-iオプション)がなかったとして
cat $filename | sed 2i $header > $filename

これについては結果対象のファイルは空となる。
理由は以下ブログで原因と対処法が記述されているので参考にされたい。

参考

orebibou.com