回答:
そのためのアプリがあります!
$ cat file1
file1 line1
file1 line2
$ cat file2
file2 line1
file2 line2
これらのファイルを引数として渡すとpaste
:
$ paste -d' ' file1 file2
file1 line1 file2 line1
file1 line2 file2 line2
「file1の最初の行の後にfile2の最初の行が続き、file1の2番目の行の後にfile2の2番目の行が続く」などの場合、貼り付けられた各行の間に新しい行が必要なことを意味し、-d
(区切り文字)オプションを調整します。
$ paste -d'\n' file1 file2
file1 line1
file2 line1
file1 line2
file2 line2
POSIX Awk; これは任意の量のファイルで機能し、ファイルは同じ量の行である必要はありません。スクリプトは、すべてのファイルが行からなくなるまで続行します。
BEGIN {
do {
br = ch = 0
while (++ch < ARGC)
if (getline < ARGV[ch]) {
printf ch < ARGC - 1 ? $0 FS : $0 RS
br = 1
}
} while (br)
}
クイックバッシュソリューション
# Takes as many file arguments as needed
function InterleaveFiles {
local counter=0
local hasLine=true
while [ $hasLine == true ]; do
hasLine=false
for i in "$@"; do
line=$(awk 'NR == num_line {print; exit}' num_line=$((counter+1)) "$i")
if [ -n "$line" ]; then
echo "$line"
hasLine=true
fi
done
counter=$((counter+1))
done
}
InterleaveFiles file1 file2 file3 file4
paste -d '\n' file1 file2 > file3
どこfile1
とfile2
入力ファイルで、file3
作成された出力となります。
printf "%s", ((ch < ARGC - 1) ? $0 FS : $0 RS)