n個のファイルがあり、ファイル名をリストに保存し、それらを結合したいと思います。これを手動で実行します。つまり、n=3の場合
cat ${filename[1]} ${filename[2]} ${filename[3]} > newfile
ファイルの内容が次の場合:
filename[1]:
line1
line2
filename[2]:
line3
line4
filename[3]:
line5
line6
新しいファイルに
newfile:
line1
line2
line3
line4
line5
line6
これを自動化するにはどうすればよいですか?つまり、ファイルの数にかかわらず、ここで3つのファイルに対して手動で行ったように、「n」について順番に結合したいと思います。
答え1
たとえば、「@」を使用できます。
$ files=( /tmp/a "/tmp/a file from windows" /tmp/myfile )
$ cat "${files[@]}" > newfile
'@' は配列の内容全体を拡張します。*
各要素を別々の要素として扱い、*
すべての要素を1つの要素に結合することを除けば、これに似ています。
答え2
最も簡単な方法は次のとおりです。
$ for i in {1..3}; do cat inputfile$i>>outputfile; done
答え3
これは些細なことですzsh
。
% echo blah > a; echo asdf > b; echo harfjr > c;
% filenames=(a b c d e)
% print -l $filenames[1,3]
a
b
c
% cat $filenames[1,3]
blah
asdf
harfjr
% cat $filenames[1,3] > anewfile
% cat anewfile
blah
asdf
harfjr
% somenum=2
% print -l $filenames[1,$somenum]
a
b
%
シェルが実際にあるbash
かksh
どうかはわかりません。