如何批量处理目录下.dat文件:提取首行首个数值追加到第二行末尾
批量处理.dat文件解决方案
直接用shell循环配合awk即可完成需求,以下是适配不同环境的实现:
GNU awk 版本(Linux系统默认可用)
支持原地修改文件,无需生成临时中转文件:
for f in *.dat; do awk -i inplace ' # 处理首行,提取第一个纯数字 NR == 1 { for(i=1; i<=NF; i++) { if ($i ~ /^[0-9]+$/) { first_num = $i break } } print } # 处理第二行,追加提取到的数字 NR == 2 { print $0, first_num } # 其余行原样输出 NR > 2 { print }' "$f" done
通用兼容版本(适配macOS/BSD等无awk inplace模块的环境)
通过临时文件中转完成原地修改:
for f in *.dat; do awk ' NR == 1 { for(i=1; i<=NF; i++) { if ($i ~ /^[0-9]+$/) { first_num = $i break } } print } NR == 2 { print $0, first_num } NR > 2 { print }' "$f" > "$f.tmp" && mv "$f.tmp" "$f" done
补充说明
- 若需要提取的数值支持带小数点的浮点数,将正则匹配规则
/^[0-9]+$/替换为/^[0-9]+\.?[0-9]*$/即可 - 执行命令前建议先备份单份测试文件验证效果,确认符合预期后再批量执行
- 命令默认遍历当前工作目录下所有
.dat后缀的文件,无需提前指定文件名列表
内容的提问来源于stack exchange,提问作者OlM
相关产品推荐
相关产品推荐

