回答:
head
とtail
ソリューションソースファイルが呼び出され~/a
、挿入されるファイルが呼び出されるとします~/b
。マージしたファイルを次の場所に配置します~/c
。
head -n 5 ~/a > ~/c
cat ~/b >> ~/c
tail --lines=+6 ~/a >> ~/c
~/
は/home/user
ディレクトリ名の省略形ですa
を新しく作成されたファイルにコピーしますc
b
に追加しますc
a
、6行目からファイルの終わりまでファイルを追加しますc
そのファイルを検証した後c
、ファイルから正しくマージさa
とb
、私たちは名前を変更するよc
にa
使用しました:
mv ~/c ~/a
mv
file c
をfileに移動しますa
。データは物理的に移動されません。ファイルの名前が変更されるだけで時間を節約できます。ここで最も簡単なツールはかもしれませんsed
。5行目以降に挿入b.txt
するa.txt
には、次のように記述できます。
sed '5r b.txt' a.txt
sed
引数(a.txt
)として指定されたファイルを1行ずつ読み取ります。すべての行は、コマンドで変更されない限り、入力で表示されたとおりに出力で再現されます。
5
次のコマンドが実行されるものとするアドレス(行番号)です。使用するコマンドはr
、引数としてファイル名(ここではb.txt
)を使用し、それを完全に読み取り、現在の行の後の出力に挿入します。
上記のように、このsed
コマンドラインは、ファイルに書き込むことなく、出力を端末にのみ出力します。Bashの出力リダイレクトを使用して、それを新しいファイル(入力ファイルではない!)にリダイレクトできます。
sed '5r b.txt' a.txt > c.txt
または、's ( "in-place")スイッチa.txt
を使用して、外部入力ファイルを直接変更できます。として記述した場合、最初にサフィックスが付いた元の入力ファイルのバックアップコピーが作成されます。sed
-i
-i.bak
.bak
sed -i '5r b.txt' a.txt
例:
$ cat a.txt
January
February
March
April
May
October
November
December
$ cat b.txt
June
July
August
September
$ sed '5r b.txt' a.txt
January
February
March
April
May
June
July
August
September
October
November
December
(@ByteCommanderのエレガントな例を再利用:)
awk '1; NR==5 {system("cat b.txt")}' a.txt