2013-07-18 6 views
1

/tmp/data/$ yearmonth/$ day/$ hour와 같은 디렉토리 구조에서 매일 일부 tsv 파일을 수집합니다. 따라서/tmp를/데이터/$의 월 (1 년 기준)/$ 일파일 배열에서 cat을 읽는 중

의 내부 24 디렉토리 내가 쉘 스크립트 같이 가지고있다 :

yearmonth=`date -d "-2 days" +%Y%m` 
day=`date -d "-2 days" +%d` 

files=() 
cd /tmp/data/$yearmonth/$day 
for i in `ls -a */*.tsv` 
do 
    files+=($i) 
done 

배열 파일이있다 그 안에 저장된 모든 TSV 파일. 이 모든 tsvfiles를 하나의 단일 tsvfiles에 "cat"하고 sort | uniq -c를 수행하려고합니다. 어떻게하면됩니까? tsv 파일이 커지면서 고양이가 매우 느려질 수 있습니다. 다른 대안이 무엇이 될 수 있습니다. 감사

+0

'고양이'에 대해 느린 점은 무엇입니까? –

+0

tsv 파일이 너무 커서 고양이 작업이 매우 느립니다. – user1189851

+2

코드를 모두 표시 할 수 있습니까? –

답변

1

당신이 보이고있다 코드 몇 가지 문제 :

  1. 충분한 파일이 있거나 이름이 하위 디렉토리 ls -a에 충분히 긴 경우는 인수 목록에 너무 많은 파일을 실패 할 것입니다. 표준 치료는 당신이 파이프 파일 목록을 할 수 찾을 일단 find

    찾기/tmp를/데이터/년/월/일 타입 F -iname '* .tsv 형식'-print0

  2. 을 사용하는 것입니다 정렬로 직접 생성

    | xargs를 -0

관련 없음 cat

종류의 --unique,하지만 물론, 파일은 여전히 ​​발견하고 읽을 수 있어야합니다.