我有一个目录,其中有许多具有以下 3 种模式的 csv 文件:STRUCTURED_PROD、STRUCTURED_NON_PROD 和 UNSTRUCTURED。我想将所有这些合并到 3 个单独的文件中,只有一个标题。正常的猫方法也是复制标题,所以我尝试如下:
UNSTRUCTURED 在顶部有一个额外的垃圾线。下面是我的脚本,但只运行 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 但它复制了两次标题:
cat *STRUCTURED_PROD.csv > Merged_STRUCTURED_PROD.csv
您通过 for 循环多次调用合并命令。
但是你只需要给每一个调用一次。放弃 for 循环,然后做