2つ(またはそれ以上)のテキストファイルの行をインターリーブする最も簡単で迅速な方法は何ですか?例:
ファイル1:
line1.1
line1.2
line1.3
ファイル2:
line2.1
line2.2
line2.3
インターリーブ:
line1.1
line2.1
line1.2
line2.2
line1.3
line2.3
両方を開き、タスクを実行する小さなPerlスクリプトを書くのは簡単です。しかし、より少ないコード、おそらくUnixツールを使用するワンライナーで逃げることが可能かどうか疑問に思っていましたか?
paste -d '\n' file1 file2
awk
を使用したソリューションは次のとおりです。
awk '{print; if(getline < "file2") print}' file1
この出力を生成します:
line 1 from file1
line 1 from file2
line 2 from file1
line 2 from file2
...etc
awk
を使用すると、出力に追加の書式設定を追加する場合に便利です。たとえば、各行のファイルに基づいて各行にラベルを付ける場合:
awk '{print "1: "$0; if(getline < "file2") print "2: "$0}' file1
この出力を生成します:
1: line 1 from file1
2: line 1 from file2
1: line 2 from file1
2: line 2 from file2
...etc
注:このコードは、file1がfile2以上の長さであると想定しています。
File1にfile2よりも多くの行が含まれ、file2の終了後にfile2の空白行を出力する場合は、getlineテストにelse句を追加します。
awk '{print; if(getline < "file2") print; else print ""}' file1
または
awk '{print "1: "$0; if(getline < "file2") print "2: "$0; else print"2: "}' file1
@ Sujoy's answer 有用な方向を指し示します。行番号を追加、ソート、および行番号を削除できます。
(cat -n file1 ; cat -n file2 ) | sort -n | cut -f2-
注(私にとって興味深い)これは、静的ファイルの代わりに、互いに遅くまたは速く実行されるコマンドの出力を使用する場合、順序を正しくするためにもう少し作業が必要です。その場合、行番号に加えて別のタグを追加/ソート/削除する必要があります。
(cat -n <(command1...) | sed 's/^/1\t/' ; cat -n <(command2...) | sed 's/^/2\t/' ; cat -n <(command3) | sed 's/^/3\t/' ) \
| sort -n | cut -f2- | sort -n | cut -f2-
GUIを使用して、スプレッドシートの2つの列に貼り付け、すべてのセルをコピーしてから、正規表現を使用してタブを改行に置き換えます。