1つのヘッダーのみを使用して異なるディレクトリのテーブルを結合する方法

1つのヘッダーのみを使用して異なるディレクトリのテーブルを結合する方法

複数のディレクトリ(「amazon」、「niger」、...)、その中に複数のサブディレクトリ(「gfdl」、「hadgem」、...)、その中に複数のサブディレクトリ(「rcp8p5」、「rcp4p5」、。 ..).最後のサブディレクトリには、常に同じフレームを持つ数千のテーブルを含む2つのフォルダ(「History」、「Projection」)があります。したがって、最後の2つのフォルダにあるテーブルをリンクしようとしています。サブディレクトリ)だから、テーブルが結合されるたびに、1つではなく1つのヘッダしかない1つの大きなテーブルだけがあります。

現在、次のループ構造を使用しています。

#!/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、または他の言語を使用することもできます。

関連情報