如何用Bash提取每行最后7个字段?大文件场景技术求助
提取每行最后7个字段的高效方案
针对你这种字段数不固定、数据量极大的场景,awk是最合适的工具,它能动态识别每行的字段总数,精准提取最后7个字段。直接用下面的命令就能解决问题:
awk -F '[:,]' '{ start = (NF >=7) ? NF-6 : 1 for(i=start; i<=NF; i++) { printf "%s", $i if(i != NF) printf "," } print "" }' /path/to/your/files/*
命令解释:
-F '[:,]':把冒号和逗号都设为字段分隔符,这样每行开头的文件名(比如2022-09-19/SALES_1.csv)会被识别为第一个字段,后面的业务数据依次为后续字段。start = (NF >=7) ? NF-6 : 1:NF是awk内置变量,表示当前行的总字段数。如果字段数≥7,就从第NF-6个字段开始(比如总共有10个字段,从第4个到第10个正好是7个);如果字段数不足7,就从第一个字段开始全量输出。- 循环打印字段:遍历从
start到NF的字段,每个字段后加逗号,最后一个字段后换行,保证输出格式和原数据一致。
为什么不用cut?
cut只能处理固定位置的字段,无法根据每行的字段总数动态调整提取范围,完全不适用你的场景。
性能说明
awk是原生的文本处理工具,处理百万级行数据效率极高,完全能应对你数十万个文件的规模,不用担心性能问题。
内容的提问来源于stack exchange,提问作者usert4jju7
相关产品推荐
相关产品推荐

