2014-10-21 2 views
1

첫 번째 파일을 제외한 각 파일의 첫 번째 줄이 삭제 된 500 개의 파일을 연결 한 결과 파일을 만들려고합니다. 원래 파일을 변경하지 않았 으면합니다.첫 번째 파일을 제외하고 각 파일에서 첫 번째 줄을 제거하는 동안 500 개의 파일 연결

나는 catsed을 파이프해야한다고 알고 있지만, 내 마음을 감쌀 수는 없다. 내가 생각할 수있는 순간에 대한

다음과 같습니다

  1. 백업 원본 파일을.
  2. 것은 사용하여 모든 파일에서 헤더를 제거합니다 3.

당신이 파이프를 제안 할 수 단계의 결과에 헤더를 추가 cat

  • 를 사용

    for x in *.seg; do sed -i 1d ${x}; done

  • CONCATENATE 파일이 원본 파일을 손상시키지 않으면 서이 작업을 수행 할 수 있습니까?

  • 답변

    3

    이 작업을 수행 할 AWK를 사용할 수 있습니다 : 첫 번째 파일의 경우

    awk 'NR == FNR || FNR > 1' *.seg > destination 
    

    , 총 레코드 번호 NR를 현재 파일 FNR의 기록 번호, 그래서 모든 선이 인쇄됩니다 동일합니다. 다른 파일의 경우 첫 번째 파일 이후의 행만 인쇄됩니다. 출력은 destination 파일로 재 지정됩니다.

    당신은 500 개 파일이있을 때, FNR > 1가 더 자주 NR == FNR보다 true로 평가되므로, 단락이 발생합니다 있도록 순서 주위에 전환 할 수 있습니다

    awk 'FNR > 1 || NR == FNR' *.seg > destination 
    

    을 때 첫 번째 부분 || 중 하나가 참이면 두 번째 부분을 평가할 필요가 없습니다. 훨씬 빠름;)

    관련 문제