2つのファイルを1つのファイルとして出力しようとしています。次のコマンドを試しました。
cat file1 file2
しかし、ここではfile2
データがfile1
。
私が必要とするのは、最初の行、file1
最初の行、2番目の行、2番目の行などです。file2
file1
file2
誰でも簡単な方法でこれを行う方法を教えてもらえますか?
答え1
これのためのアプリがあります!
$ 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
答え2
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)
}
答え3
クイックソリューション
# 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 ファイル 1 ファイル 2 ファイル 3 ファイル 4
答え4
paste -d '\n' file1 file2 > file3
とfile1
はfile2
入力ファイルで、file3
生成された出力になります。