i=0
{ paste res.? res.?? res.???
while paste ./res."$((i+=1))"[0-9][0-9][0-9]
do :; done; } >outfile
ฉันไม่คิดว่ามันซับซ้อนเท่านี้ - คุณทำงานหนักมาแล้วโดยสั่งชื่อไฟล์ อย่าเพิ่งเปิดทั้งหมดในเวลาเดียวกันคือทั้งหมด
อีกวิธีหนึ่ง:
pst() if shift "$1"
then paste "$@"
fi
set ./res.*
while [ -n "${1024}" ] ||
! paste "$@"
do pst "$(($#-1023))" "$@"
shift 1024
done >outfile
... แต่ฉันคิดว่ามันจะย้อนกลับไป ... สิ่งนี้อาจทำงานได้ดีกว่า:
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
และนี่คือวิธีอื่น :
tar --no-recursion -c ./ |
{ printf \\0; tr -s \\0; } |
cut -d '' -f-2,13 |
tr '\0\n' '\n\t' >outfile
ที่อนุญาตให้tar
รวบรวมไฟล์ทั้งหมดเป็นสตรีมที่มีการคั่นด้วย null สำหรับคุณแยกวิเคราะห์ข้อมูลเมตาส่วนหัวทั้งหมดยกเว้นชื่อไฟล์และแปลงทุกบรรทัดในไฟล์ทั้งหมดเป็นแท็บ มันขึ้นอยู่กับการป้อนข้อมูลเป็นไฟล์ข้อความจริงแม้ว่า - หมายถึงปลายแต่ละด้านด้วยขึ้นบรรทัดใหม่และไม่มีไบต์เป็นโมฆะในไฟล์ โอ้ - และยังอาศัยอยู่กับชื่อไฟล์ที่ตัวเองเป็นบรรทัดใหม่ฟรี( แต่ที่อาจจะได้รับการจัดการอย่างทนทานกับ GNU tar
's--xform
ตัวเลือก) เมื่อปฏิบัติตามเงื่อนไขเหล่านี้แล้วก็ควรทำงานให้สั้นมาก ๆ ในจำนวนไฟล์ใด ๆ และtar
จะทำเกือบทั้งหมด
ผลลัพธ์คือชุดของบรรทัดที่มีลักษณะดังนี้:
./fname1
C1\tC2\tC3...
./fname2
C1\tC2\t...
และอื่น ๆ
ฉันทดสอบโดยสร้าง 5 ไฟล์แรก ตอนนี้ฉันไม่ได้รู้สึกว่ากำลังสร้างไฟล์ 10,000 ไฟล์ดังนั้นฉันจึงยิ่งใหญ่ขึ้นสำหรับแต่ละไฟล์ - และทำให้มั่นใจได้ว่าความยาวของไฟล์นั้นแตกต่างกันมาก สิ่งนี้มีความสำคัญเมื่อทำการทดสอบtar
สคริปต์เนื่องจากtar
จะบล็อกการป้อนข้อมูลเป็นความยาวคงที่ - หากคุณไม่ลองความยาวที่แตกต่างกันอย่างน้อยสองสามครั้ง
อย่างไรก็ตามสำหรับไฟล์ทดสอบที่ฉันทำ:
for f in 1 2 3 4 5; do : >./"$f"
seq "${f}000" | tee -a [12345] >>"$f"
done
ls
หลังจากนั้นรายงาน:
ls -sh [12345]
68K 1 68K 2 56K 3 44K 4 24K 5
... จากนั้นฉันก็วิ่ง ...
tar --no-recursion -c ./ |
{ printf \\0; tr -s \\0; }|
cut -d '' -f-2,13 |
tr '\0\n' '\n\t' | cut -f-25
... เพื่อแสดงเฉพาะฟิลด์ที่คั่นด้วยแท็บ 25 รายการแรกต่อบรรทัด(เนื่องจากแต่ละไฟล์เป็นบรรทัดเดียว - มีจำนวนมาก ) ...
ผลลัพธ์คือ:
./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
ตัวเลือกกับpaste
คำสั่งหรือไม่?