百万行CSV文件基于表头提取指定范围列的技术求助
基于表头提取指定列的awk解决方案
针对你的百万行CSV文件,这里提供一个基于表头名称自动匹配列位置的awk命令,无需手动指定列号,完美适配需求:
BEGIN { FS = " "; OFS = " " } NR == 1 { # 遍历表头,记录每个字段的列号 for (i=1; i<=NF; i++) { col_map[$i] = i } # 确定目标列的起始和结束位置 start_col = col_map["300B"] end_col = col_map["304"] - 1 } # 打印每一行的目标列 { line = "" for (i=start_col; i<=end_col; i++) { line = line (line == "" ? "" : OFS) $i } print line }
命令说明:
- 分隔符设置:
FS = " "; OFS = " "表示输入输出都用空格分隔,如果你的CSV实际是逗号分隔,只需把这两个值改成","即可。 - 表头处理:第一行(
NR==1)会遍历所有表头字段,把每个字段名和对应的列号存入col_map数组,接着自动找到300B的起始列号,以及304列号减1作为结束列(因为要排除304)。 - 行内容输出:对每一行(包括表头),从
start_col到end_col的字段会被拼接成一行输出,保持原分隔符格式。
执行方式:
把上述命令保存为extract_cols.awk,或者直接在终端执行:
awk -f extract_cols.awk your_data.csv > output.csv
这个方案处理百万行数据效率很高,awk本身就是为大文本处理优化的工具,不会有性能问题。
内容的提问来源于stack exchange,提问作者user20578273
相关产品推荐
相关产品推荐

