missway
missway

Reputation: 37

Linux bash weave two text files into one alternative line using all available lines

I am looking to merge two text files into one, where all the lines from one text file become odd line numbers and the other file becomes even line numbers such as to weave the files together

input1.txt

1, 267, Note_on_c, 0, 67, 100
1, 758, Note_on_c, 0, 58, 100
1, 1248, Note_on_c, 0, 79, 100
1, 1739, Note_on_c, 0, 52, 100

input2.txt

1, 368, Note_off_c, 0, 67, 127
1, 936, Note_off_c, 0, 58, 127
1, 1415, Note_off_c, 0, 79, 127
1, 1917, Note_off_c, 0, 52, 127

and need to combine these text files to create the following output

1, 267, Note_on_c, 0, 67, 100
1, 368, Note_off_c, 0, 67, 127
1, 758, Note_on_c, 0, 58, 100
1, 936, Note_off_c, 0, 58, 127
1, 1248, Note_on_c, 0, 79, 100
1, 1415, Note_off_c, 0, 79, 127
1, 1739, Note_on_c, 0, 52, 100
1, 1917, Note_off_c, 0, 52, 127

so I am looking to merge these files in the true since of the word weave

Upvotes: 1

Views: 390

Answers (2)

pmf
pmf

Reputation: 36048

Another alternative would be using paste with a newline as delimiter

paste -d '\n' input1.txt input2.txt
1, 267, Note_on_c, 0, 67, 100
1, 368, Note_off_c, 0, 67, 127
1, 758, Note_on_c, 0, 58, 100
1, 936, Note_off_c, 0, 58, 127
1, 1248, Note_on_c, 0, 79, 100
1, 1415, Note_off_c, 0, 79, 127
1, 1739, Note_on_c, 0, 52, 100
1, 1917, Note_off_c, 0, 52, 127

From man paste:

Write lines consisting of the sequentially corresponding lines from each FILE

Upvotes: 6

Cyrus
Cyrus

Reputation: 88583

With GNU sed's R command:

sed 'R input2.txt' input1.txt

Output:

1, 267, Note_on_c, 0, 67, 100
1, 368, Note_off_c, 0, 67, 127
1, 758, Note_on_c, 0, 58, 100
1, 936, Note_off_c, 0, 58, 127
1, 1248, Note_on_c, 0, 79, 100
1, 1415, Note_off_c, 0, 79, 127
1, 1739, Note_on_c, 0, 52, 100
1, 1917, Note_off_c, 0, 52, 127

From man sed:

R filename: Append a line read from filename. Each invocation of the command reads a line from the file. This is a GNU extension.

Upvotes: 5

Related Questions