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
의 --xform
옵션으로 강력하게 처리 할 수는 있지만 ) . 이러한 조건이 충족되면 파일 수에 관계없이 매우 짧은 시간 안에 작업해야하며 tar
거의 모든 작업을 수행합니다.
결과는 다음과 같은 라인 세트입니다.
./fname1
C1\tC2\tC3...
./fname2
C1\tC2\t...
등등.
먼저 5 개의 테스트 파일을 작성하여 테스트했습니다. 나는 지금 당장 10000 개의 파일을 생성하는 느낌이 들지 않았기 때문에 각 파일마다 조금 더 커 졌으며 파일 길이가 크게 달라졌 습니다. 고정 길이에 대한 입력을 차단 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
?