Text-Processing

按模板合併2個文件記錄

  • July 25, 2016

我正在嘗試使用 awk 以一種相當特殊的方式合併兩個文本文件,從 file1 中獲取兩行,從 file2 中獲取一組單詞(但放在單獨的行上),無限交替。file2 中的單片語由逗號分隔。例如:

文件 1

A Partridge in a Pear Tree
Two Turtle Doves
Three French Hens
Four Calling Birds
Five Gold Rings
Six Geese a-Laying
Seven Swans a-Swimming
Eight Maids a-Milking
Nine Ladies Dancing
Ten Lords a-Leaping
Eleven Pipers Piping
Twelve Drummers Drumming

文件2

I was born, the red planet, I am hungry, on Mars
I love frogs, they are so tasty, with gold sun, red ketchup

輸出文件

A Partridge in a Pear Tree
Two Turtle Doves
I was born
the red planet 
I am hungry
on Mars
Three French Hens
Four Calling Birds
I love frogs
they are so tasty
with gold sun
red ketchup
Five Gold Rings
Six Geese a-Laying
Seven Swans a-Swimming
Eight Maids a-Milking
Nine Ladies Dancing
Ten Lords a-Leaping
Eleven Pipers Piping
Twelve Drummers Drumming

細節:

  • 在輸出文件中,每 2 行 file1 從欄位 File2 創建 4 個附加行
  • file1 被分成兩行的對聯,無論內容如何
  • file2 中的一行有 4 個組(即 3 個逗號)
  • 在輸出文件中沒有逗號
  • file2 中的一個組有固定數量的 fild
  • file1 和 file2 可以任意長
  • file2 總是小於 file1
  • 用逗號分隔的 File2 欄位在每條記錄(3,3,3,2)中總是以相同的順序出現,即, $ 1 $ 2 $ 3, $ 4 $ 5 $ 6, $ 7 $ 8 $ 9, $ 10 S11

在輸出文件中要這樣排列

梨樹上的鷓鴣

兩隻斑鳩

$ 1 $ 2 $3

$ 4 $ 5 $6

$ 7 $ 8 $9

10 美元 S11

三隻法國母雞

四隻呼喚鳥

我愛青蛙

它們很好吃

有金太陽

紅番茄醬

五枚金戒指

六雁產蛋

七隻天鵝游泳

八女僕擠奶

九位女士跳舞

十主一躍

十一風笛手

十二鼓手擊鼓

  • 當您到達一個文件的末尾但另一個文件中仍有數據時所需的行為未指定 - 剩餘數據(來自 file1)將被列印而不會更改

我該怎麼做呢?

file1我相信你已經在你的例子中過早地放了第五行。

如果我是對的,試試這個片段:

awk '(NR+1)%2{print $0;getline<"file2";n=split($0,a,", ");if(n>1)for(i in a)print a[i];next}1' file1

輸出:

A Partridge in a Pear Tree
Two Turtle Doves
I was born
the red planet
I am hungry
on Mars
Three French Hens
Four Calling Birds
I love frogs
they are so tasty
with gold sun
red ketchup
Five Gold Rings
Six Geese a-Laying
Seven Swans a-Swimming
Eight Maids a-Milking
Nine Ladies Dancing
Ten Lords a-Leaping
Eleven Pipers Piping
Twelve Drummers Drumming

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