2017-04-19 1 views
2

모든 정렬 된 gzip 파일의 디렉토리가 있습니다. 얼마나 많은 파일이 디렉토리에 있는지 알 수 없습니다. 이 파일들을 하나의 파일로 병합하고 싶습니다. 나는 이것에 대해 다음과 같이 생각했다. find . -type f | xargs zcat | sort 그러나 -m 플래그를 추가하면 파일을 차례로 연결한다. sort -m을 사용하여 디렉토리의 모든 정렬 된 파일을 병합 할 수 있습니까?파일 이름을 모르는 상태에서 정렬 된 파일 병합

감사합니다.

@ chepner의 솔루션은 압축되지 않은 파일에 완벽하게 적용됩니다.

+0

'sort' 명령은 압축 된 파일을 입력으로 사용할 수 없습니다. –

+1

'sort -m'은 정렬하지 않습니다; 그것은 미리 정렬 된 입력 파일 만 병합합니다. 표준 입력에서 읽을 때 * 입력 파일 만 * 하나 있습니다. 이 문맥에서는 단순히'-m'을 사용하지 않아도됩니다. – chepner

+0

나는 그것이 모두 정렬되어 있다는 것을 알고 있기 때문에 단순히 파일을 병합하고 싶습니다. 그렇게 할 수 있습니까? –

답변

0

나는 대답을 발견했다!

find . -type f | awk '{print "<(gzip -cd "$0")"}' | tr "\n" " " | (echo -n sort -m " "; cat -; echo) | bash

디렉토리에있는 모든 파일을 발견, 그리고 그 길을 따라 공백으로 줄 바꿈을 교체, 정렬 명령에 대한 인수로 보냅니다. 여기에 오는 데 도움을 주셔서 감사합니다!

3

사전 정렬 된 파일을 병합하려면 데이터를 표준 입력으로 사용하지 말고 인수로 인수를 제공해야합니다. 단지 사용, 당신은 많은 파일이없는 가정

sort -m * 
+2

그러나 파일은'gzip'd입니다. 아마도 일부 프로세스 대체를 구축하거나 평가해야 할 것입니다. –

+0

예, 그것이 내 문제의 근원입니다. –

+0

두 개의 gzip 파일을 결합하여 하나의 긴 gzip 파일로 만들 수 있습니다. * sort *을 실제로 할 필요가 없다면,'cat log * .gz> bigfile.gz'는 괜찮은 것처럼 보일 것입니다. – ghoti

관련 문제