awkでgetlineを使ってファイルからn行づつデータを取得させる(別のファイルからデータを取得して差し込みetc…)
Pocket

先日行われたシェル芸勉強会の中で、別のファイルから1行ずつデータを取得させたいということがあった。
いろいろとやり方を調べたりしていたのだが、その中でくんすとさんという方がいい感じの回答をしていた。

cat speech | awk 'NF==0{getline< "speech2"}{print}'#シェル芸
Sponsored Links

実行例を書いてみる。
以下の例では、「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行ずつ読み込むのにも使えたのはちゃんと理解できてなかった。
(というか、こういう使い方が本来あるべき姿なのかもだけど)

 

【参考】

 

Pocket

Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

メールアドレスが公開されることはありません。

*