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