テキストファイルの内容をコピーして、特定の行から別のテキストファイルに貼り付けるにはどうすればよいですか?


12

テキストファイルの内容をコピーして、別のテキストファイルに貼り付ける必要があります。最初のテキストファイルには10行のデータがあり、それらを行番号5から始まる2番目のテキストファイル(たとえば)にコピーする必要があります。したがって、2番目のテキストファイルでは、これらのデータを5行目から14行目まで書き込む必要があります。前もって感謝します。私はLinuxに関する新人だと考えてください。

回答:


9

headtailソリューション

ソースファイルが呼び出され~/a、挿入されるファイルが呼び出されるとします~/b。マージしたファイルを次の場所に配置します~/c

head -n 5 ~/a > ~/c
cat ~/b >> ~/c
tail --lines=+6 ~/a >> ~/c
  • パス~//home/userディレクトリ名の省略形です
  • headは、ファイルの最初の5行aを新しく作成されたファイルにコピーしますc
  • catはファイルの内容をリストし、ファイルbに追加しますc
  • tailはa、6行目からファイルの終わりまでファイルを追加しますc

検証後、マージされたファイルの名前を変更します

そのファイルを検証した後c、ファイルから正しくマージさab、私たちは名前を変更するよca使用しました:

mv ~/c ~/a
  • mvfile cをfileに移動しますa。データは物理的に移動されません。ファイルの名前が変更されるだけで時間を節約できます。

ご回答ありがとうございます。うまくいきました。しかし、3番目のテキストファイルを使用せずにこれを行う別の方法はありますか?
G.パスチャリス

完了したら、3番目のファイルの名前をソースファイルに変更できます。最初にファイルを表示できるのが最善だと思いました。答えに追加の手順を追加します。
WinEunuuchs2Unix

それとも...(head -n 5 a.txt ; cat b.txt ; tail -n +6 a.txt) > c.txt

1
@JJoaoそれは素晴らしい1行の要約です:)教育目的のために、コマンドメソッドごとに1行を使用し、ifステートメントをネストすることを好みます。ただし、ターミナルにコピーして貼り付けるには、1つのライナーが大好きです!
WinEunuuchs2Unix

16

ここで最も簡単なツールはかもしれません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

0

(@ByteCommanderのエレガントな例を再利用:)

awk '1; NR==5 {system("cat b.txt")}' a.txt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.