Linux

在交替行上粘貼文本

  • September 1, 2019

假設有兩個文件,“main”和“rename”。文件“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

您可以Awk通過處理這兩個文件來使用,將一個文件內容保存在系統記憶體中,而在我們對其進行迭代時將另一個文件內容保存在系統記憶體中。

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

對其工作原理的簡要說明

  • 該部分通過在數組中索引文件內容來FNR==NR{ words[NR]=$0; next}對第一個文件進行操作。是一個跟踪目前行號的特​​殊變數。所以數組變成了類似rename``words``NR``Awk``words['1']="yellow", words['2']="white"
  • 之後的部分{..}現在適用於下一個文件rename,如果該行匹配,我們通過附加創建的數組中的元素來#更新目前行。$0
  • print命令列印在 之後附加字元串的行#,以它開頭的行和其他行原樣列印。

引用自:https://unix.stackexchange.com/questions/538225