交互にテキストを貼り付ける

交互にテキストを貼り付ける

「main」と「rename」という2つのファイルがあるとします。 「rename」ファイルには、「main」ファイルの代替行に名前を追加するために使用される複数の行があります。 (「名前変更」の位置基準)

別のファイルの行をリンクするために使用しましたが、pasteこの状況に閉じ込められました。

コピー&ペーストを使用せずにこれを行う他の方法はありますか? (Ubuntu Linux 18.04で簡単に使用できるコマンドを使用することをお勧めします。)

ファイル「マスター」

#
stars
#
twinkle
#
on
#
the
#
sky

ファイル「名前の変更」

yellow
white
green
red
blue

希望の出力

#yellow
stars
#white
twinkle
#green
on
#red
the
#blue
sky

ベストアンサー1

Awk両方のファイルを処理してそれを繰り返す間、あるファイルコンテンツはシステムメモリに、他のファイルコンテンツはシステムメモリに保持することによってそれを使用できます。

awk 'FNR==NR{ words[NR]=$0; next}{ if ($0 ~ /^#/) $0 = $0 words[++idx];  print }' rename main

動作原理の簡単な説明

  • このセクションは、配列内のファイルの内容にインデックスを付けることによって最初のファイルFNR==NR{ words[NR]=$0; next}に対して機能します。現在行番号を追跡するために使用される特殊変数です。だから配列は次のようになりますrenamewordsNRAwkwords['1']="yellow", words['2']="white"
  • {..}現在の部分は次のファイルに適用され、rename行が一致すると生成された配列の要素を追加して現在の行を更新します#$0
  • このコマンドで始まる行の場合、printコマンドは文字列が追加された行を印刷し#、他の行はそのまま印刷します。

おすすめ記事