私はawkを使ってやや具体的な方法で2つのテキストファイルをマージしようとしています。 file1 から 2 行を取り、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
詳細:
- 出力ファイルでは、file1の2行ごとにFile2フィールドに4行の追加行が作成されます。
- file1 は、内容に関係なく、2 行のカプラーに分割されます。
- file2の1行には4つのグループ(3つのカンマなど)があります。
- 出力ファイルにカンマがありません
- file2のグループには固定数のフィールドがあります。
- file1 と file2 は任意に長くできます。
- file2 は常に file1 より小さい。
カンマ区切りのFile2フィールドは、常に各レコードに同じ順序(3、3、3、2)で表示されます。つまり、$1 $2 $3、$4 $5 $6、$7 $8 $9、$10 S11
出力ファイルで、次のようにソートします。
梨の木に眠る
山鳩2匹
$1 $2 $3
$4 $5 $6
$7 $8 $9
$10S11
フランスの鶏3匹
4匹のおむつは鳥です
私はカエルが大好き
彼らはおいしいです
黄金色の太陽と
赤いトマトソース
五つの金輪
ガチョウ6匹が卵を産む
七匹の白鳥が泳いでいる
8人のメイド搾乳
踊る9人の女性
テンロードジャンプ
イレブンパイパースパイプ
12人のドラマーが北を打っている
- あるファイルの終わりに達したが他のファイルにまだデータがある場合は、目的の動作が指定されていません。残りのデータ(file1の)は変更されずに印刷されます。
どうすればいいですか?
ベストアンサー1
file1
あなたの例では、5行目が早すぎると思います。
私の言葉が正しい場合は、次のスニペットを試してください。
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