i=0
{ paste res.? res.?? res.???
while paste ./res."$((i+=1))"[0-9][0-9][0-9]
do :; done; } >outfile
Saya tidak berpikir ini serumit semua itu - Anda sudah melakukan kerja keras dengan memesan nama file. Hanya saja, jangan membuka semuanya sekaligus, itu saja.
Cara lain:
pst() if shift "$1"
then paste "$@"
fi
set ./res.*
while [ -n "${1024}" ] ||
! paste "$@"
do pst "$(($#-1023))" "$@"
shift 1024
done >outfile
... tapi saya pikir itu membuat mereka mundur ... Ini mungkin bekerja lebih baik:
i=0; echo 'while paste \'
until [ "$((i+=1))" -gt 1023 ] &&
printf '%s\n' '"${1024}"' \
do\ shift\ 1024 done
do echo '"${'"$i"'-/dev/null}" \'
done | sh -s -- ./res.* >outfile
Dan inilah cara lain :
tar --no-recursion -c ./ |
{ printf \\0; tr -s \\0; } |
cut -d '' -f-2,13 |
tr '\0\n' '\n\t' >outfile
Yang memungkinkan tar
untuk mengumpulkan semua file menjadi aliran tanpa batas nol untuk Anda, mem-parsing semua metadata headernya kecuali nama file, dan mengubah semua baris di semua file menjadi tab. Itu bergantung pada input menjadi file teks aktual - yang berarti masing-masing berakhir dengan baris baru dan tidak ada null-byte dalam file. Oh - dan juga bergantung pada nama file sendiri menjadi baris baru bebas (meskipun yang mungkin ditangani bersemangat dengan GNU tar
's --xform
pilihan) . Mengingat kondisi ini terpenuhi, itu harus membuat pekerjaan yang sangat singkat dari sejumlah file - dan tar
akan melakukan hampir semua itu.
Hasilnya adalah serangkaian garis yang terlihat seperti:
./fname1
C1\tC2\tC3...
./fname2
C1\tC2\t...
Dan seterusnya.
Saya mengujinya dengan terlebih dahulu membuat 5 testfile. Saya tidak benar-benar ingin membuat 10.000 file sekarang, jadi saya hanya sedikit lebih besar untuk masing-masing - dan juga memastikan bahwa panjang file berbeda dengan banyak. Ini penting ketika menguji tar
skrip karena tar
akan memblokir input ke panjang tetap - jika Anda tidak mencoba setidaknya beberapa panjang berbeda Anda tidak akan pernah tahu apakah Anda benar-benar akan menangani hanya satu.
Lagi pula, untuk file tes yang saya lakukan:
for f in 1 2 3 4 5; do : >./"$f"
seq "${f}000" | tee -a [12345] >>"$f"
done
ls
setelah itu dilaporkan:
ls -sh [12345]
68K 1 68K 2 56K 3 44K 4 24K 5
... lalu aku berlari ...
tar --no-recursion -c ./ |
{ printf \\0; tr -s \\0; }|
cut -d '' -f-2,13 |
tr '\0\n' '\n\t' | cut -f-25
... hanya untuk menampilkan hanya 25 bidang tab-dibatasi pertama per baris (karena setiap file adalah satu baris - ada banyak ) ...
Outputnya adalah:
./1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
./2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
./3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
./4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
./5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
--serial
opsi denganpaste
perintah?