先日行われたシェル芸勉強会の中で、別のファイルから1行ずつデータを取得させたいということがあった。
いろいろとやり方を調べたりしていたのだが、その中でくんすとさん
がいい感じの回答をしていた。
bash
cat speech | awk 'NF==0{getline< "speech2"}{print}'#シェル芸
実行例を書いてみる。 以下の例では、「seq.txt」の空行に「aiueo.txt」というファイルの中身を差し込んでいっている。
shell[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行ずつ読み込むのにも使えたのはちゃんと理解できてなかった。 (というか、こういう使い方が本来あるべき姿なのかもだけど)