web-dev-qa-db-ja.com

2つのファイルをマージします。最初のファイルの最初の行に2番目のファイルの最初の行が続きます。

私は2つのファイルを持っています:

f1:                                      f2:
==============                         ===============
some text line 1                       A1
some text line 2                       A2
some text line 3                       A3

これらの2つのファイルをすばやくマージしてf3を作成できますか?

some text line 1
A1
some text line 2
A2
some text line 3 
A3
8
Forever Learner

pasteの仕事です:

paste -d'\n' f1.txt f2.txt

例:

$ cat foo.txt 
some text line 1
some text line 2
some text line 3

$ cat bar.txt 
A1
A2
A3

$ paste -d'\n' foo.txt bar.txt 
some text line 1
A1
some text line 2
A2
some text line 3
A3
20
heemayl

はい、1つのwhileループを使用してこれを実行し、readを使用して2つのファイルを読み取ることができます。

#!/bin/sh

while read file1 <&3 && read file2 <&4
do
    printf "%s\n" "$file1" >> mergedFile.txt
    printf "%s\n" "$file2" >> mergedFile.txt
done 3</path/to/file1/file1.txt 4</path/to/file2/file2.txt

echoの代わりにprintfを使用できます。結果はmergedFile.txtにあります。処理しているファイルが大きくない場合、おそらく上記はほとんどのソリューションよりも簡単で移植性があります。

3
sentifool

POSIX Awk;これは任意の量のファイルで機能し、ファイルは同じ量の行である必要はありません。スクリプトは、すべてのファイルが行からなくなるまで続行します。

BEGIN {
  do {
    br = ch = 0
    while (++ch < ARGC)
      if (getline < ARGV[ch]) {
        print
        br = 1
      }
  } while (br)
}
1
Steven Penny