複数のCSVファイルを異なるスキーマにマージする

複数のCSVファイルを異なるスキーマにマージする

STRUCTURED_PROD、STRUCTURED_NON_PROD、およびUNSTRUCTUREDの3つのパターンを持つ多くのcsvファイルがあるディレクトリがあります。私はこれらすべてをヘッダーが1つだけある3つの別々のファイルに結合したいと思います。通常のcatメソッドもヘッダをコピーするので、次のことを試しました。

構造化されていない上部には追加のグランジラインがあります。以下は私のスクリプトですが、6つのファイルだけで実行するには時間がかかります。

File_Path=/Source/temp/
for Files in $File_Path/*.csv; do

if [[ "$Files" = *STRUCTURED_PROD* ]]; then
#cat *STRUCTURED_PROD.csv > Merged_STRUCTURED_PROD.csv
awk '(NR == 1) || (FNR > 1)' *STRUCTURED_PROD.csv > Merged_STRUCTURED_PROD.csv
fi

if [[ "$Files" = *STRUCTURED_NON_PROD* ]]; then

awk '(NR == 1) || (FNR > 1)' *STRUCTURED_NON_PROD.csv > Merged_STRUCTURED_NON_PROD.csv
fi

if [[ "$Files" = *_UNSTRUCTURED* ]]; then
awk 'FNR>2 || NR==2' *_UNSTRUCTURED.csv > Merged_UNSTRUCTURED.csv
fi

done

私は以前awkの代わりにこれを試しましたが、ヘッダーは2回コピーされました。

cat *STRUCTURED_PROD.csv > Merged_STRUCTURED_PROD.csv

ベストアンサー1

forループを介してマージコマンドを複数回呼び出します。

しかし、一度だけ呼び出すだけです。 forループを捨てて、ただ実行してください。

File_Path=/Source/temp/

awk '(NR == 1) || (FNR > 1)' ${File_Path}*STRUCTURED_PROD.csv > Merged_STRUCTURED_PROD.csv
awk '(NR == 1) || (FNR > 1)' ${File_Path}*STRUCTURED_NON_PROD.csv > Merged_STRUCTURED_NON_PROD.csv
awk 'FNR>2 || NR==2' ${File_Path}*_UNSTRUCTURED.csv > Merged_UNSTRUCTURED.csv

おすすめ記事