하나의 헤더만 사용하여 서로 다른 디렉터리의 테이블을 조인하는 방법

하나의 헤더만 사용하여 서로 다른 디렉터리의 테이블을 조인하는 방법

여러 디렉터리("amazon", "niger", ...), 그 안에 여러 하위 디렉터리("gfdl", "hadgem", ...), 그 안에 여러 하위 디렉터리("rcp8p5", "rcp4p5", . ..). 마지막 하위 디렉터리에는 항상 동일한 프레임을 가진 수천 개의 테이블이 포함된 두 개의 폴더("History", "Projection")가 있습니다. 따라서 마지막 두 폴더에 있는 테이블을 연결하려고 합니다. 하위 디렉터리) 그래서 테이블이 조인될 때마다 하나가 아닌 하나의 헤더만 있는 하나의 큰 테이블만 있게 됩니다.

현재 다음 루프 구조를 사용하고 있습니다.

#!/bin/bash
# usage:cat_dat dirname

data_dir=/scratch/01/stevens/climate_scenario/river

for river in tagus
  do
   for gcm in gfdl-esm2m hadgem2-es
     do
      for scenario in rcp8p5 rcp4p5 rcp6p0 rcp2p6
        do
          find "${data_dir}/${river}/${gcm}/${scenario}" name \*.dat -exec cat {} + >> "${data_dir}/${river}/${gcm}/${scenario}.dat"
      done
   done
done

하지만 제목은 지울 수가 없어요! 어떤 도움이라도 대단히 감사하겠습니다! 감사해요!

답변1

당신은 가깝습니다. 대신 첫 줄 건너뛰기를 cat사용 awk하고 나머지 줄을 인쇄할 수 있습니다.

find "${data_dir}/${river}/${gcm}/${scenario}" name \*.dat -exec awk 'NR > 1' {} + >> "${data_dir}/${river}/${gcm}/${scenario}.dat"

awk이는 기본 동작에 의존하므로 매우 빈 스크립트입니다 . BEGIN이나 END가 없으며 기본 작업을 사용하여 인쇄합니다.

저는 이 도구를 awk더 자주 사용하기 때문에 추천하지만, 다른 도구를 사용해도 동일한 효과를 얻을 수 있습니다.

그리고sed:

sed 1d

그리고꼬리:

tail -n +2

물론 Perl, Python 또는 다른 언어를 사용할 수도 있습니다.

관련 정보