先日行われたシェル芸勉強会の中で、別のファイルから1行ずつデータを取得させたいということがあった。
いろいろとやり方を調べたりしていたのだが、その中でくんすとさん
がいい感じの回答をしていた。
cat speech | awk 'NF==0{getline< "speech2"}{print}'#シェル芸
実行例を書いてみる。 以下の例では、「seq.txt」の空行に「aiueo.txt」というファイルの中身を差し込んでいっている。
[blacknon@thinkpad25][~/Work/201910/20191031]
(`・ω・´) < cat seq.txt
1
2
3
4
5
6
7
8
9
10
[blacknon@thinkpad25][~/Work/201910/20191031]
(`・ω・´) < cat aiueo.txt
あ
い
う
え
お
か
き
く
け
こ
[blacknon@thinkpad25][~/Work/201910/20191031]
(`・ω・´) < cat seq.txt | awk 'NF==0{getline<"aiueo.txt"}1'
1
あ
2
い
3
う
4
え
5
お
6
か
7
き
8
く
9
け
10
こ
awkのgetline自体は、過去にOSのコマンド実行時にその結果をawkで取得するために何度か使っていたのだけど、ファイルを1行ずつ読み込むのにも使えたのはちゃんと理解できてなかった。 (というか、こういう使い方が本来あるべき姿なのかもだけど)