我有一个文件夹,其中包含几个使用这种命名约定的文件(4个部分由下划线分隔):
Part1_Part2_Part3_Part4.csv
例如:
AAA_XXX_AAA001_20991231.csv
AAA_XXX_AAA001_20991131.csv
AAA_XXX_AAA002_20991031.csv
AAA_XXX_AAA002_20990931.csv
BBB_XXX_BBB001_20991231.csv
BBB_XXX_BBB001_20991131.csv
BBB_XXX_BBB002_20991031.csv
BBB_XXX_BBB002_20990931.csv
我需要创建一个shell脚本,该脚本根据部分字符串Part1和Part3对其进行分组,并使用如下命名约定创建一个zip存档:
Part1_Part3.zip
例如名为的zip文件
“ AAA_AAA001.zip”应包含文件:
AAA_XXX_AAA001_20991231.csv
AAA_XXX_AAA001_20991131.csv“ AAA_AAA002.zip”应包含文件:
AAA_XXX_AAA002_20991231.csv
AAA_XXX_AAA002_20991131.csv与上面的“ BBB_BBBXXX.zip”相同。
文件的结构是固定的。 Part1始终在开头,Part3始终在第二个下划线之后。字符数可以变化。
我对Shell脚本完全陌生。我已经花了几个小时尝试处理字符串,压缩文件等,但是我无法利用这些知识来提供像这样的完整解决方案。
非常感谢您的帮助。
答案 0 :(得分:0)
首先获得所有组合part1-part3并使其成为唯一列表。
您可以将自己的选项添加到zip
,我想您想要类似的东西
ls *_*_*.csv | cut -d_ -f1,3 | sort -u| while IFS=_ read -r part1 part3; do
echo "zipfile ${part1}_${part3}.zip"
echo "Files ${part1}_*_${part3}_*.csv"
zip ${part1}_${part3}.zip ${part1}_*_${part3}_*.csv
done
编辑:按照注释中的建议纠正了错字。