回答:
headとtailソリューションソースファイルが呼び出され~/a、挿入されるファイルが呼び出されるとします~/b。マージしたファイルを次の場所に配置します~/c。
head -n 5 ~/a > ~/c
cat ~/b >> ~/c
tail --lines=+6 ~/a >> ~/c
~/は/home/userディレクトリ名の省略形ですaを新しく作成されたファイルにコピーしますcbに追加しますca、6行目からファイルの終わりまでファイルを追加しますcそのファイルを検証した後c、ファイルから正しくマージさaとb、私たちは名前を変更するよcにa使用しました:
mv ~/c ~/a
mvfile 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