如何编写bash脚本复制文件、交换前两列并追加到原文件底部
实现product-feed字段交换追加的bash脚本
原脚本问题说明
- awk默认按空白字符分割字段,未适配CSV的逗号分隔规则,无法正确识别sku、productId两列
- 复制操作后tmp为目录,直接作为awk输入源无法读取文件内容
- 追加步骤中
*.csv会被shell展开为多个文件名,不符合重定向语法要求 - 未处理CSV表头,直接追加会导致表头重复且错位
可直接运行的完整脚本
#!/bin/bash # 定义feed存储根目录 FEED_PATH="/var/ftp/JNM-01-020420/inbound/product-feed/en_US" # 进入工作目录,失败直接退出避免异常操作 cd "${FEED_PATH}" || exit 1 # 提前创建临时目录避免不存在报错 mkdir -p ./tmp # 遍历目录下所有CSV文件逐个处理 for feed_file in *.csv; do # 跳过非文件类型匹配结果 [ -f "${feed_file}" ] || continue # 交换前两列,跳过原表头(不需要跳的话删除NR>1即可),输出到临时文件 awk 'BEGIN{FS=OFS=","} NR>1 {tmp=$1;$1=$2;$2=tmp;print $0}' "${feed_file}" > ./tmp/swap_result.tmp # 将处理后的内容追加到原feed文件末尾 cat ./tmp/swap_result.tmp >> "${feed_file}" # 清理临时文件 rm -f ./tmp/swap_result.tmp done
使用说明
- 将上述内容保存为
swap_feed_column.sh - 添加执行权限:
chmod +x swap_feed_column.sh - 执行脚本:
./swap_feed_column.sh
内容的提问来源于stack exchange,提问作者DeeBee
相关产品推荐
相关产品推荐

