使用awk新增行号列后如何正确选择对应列并匹配表头
问题修正方案
错误原因
- 未指定输出字段分隔符:awk默认输出分隔符为空格,你需要设置
OFS=";"匹配输入的分号分隔格式 - 列提取逻辑错误:你是在输出阶段才新增行号列,awk读取的原始字段仍为源文件的3列,「新增行号后的第三列」对应源文件的第二列
$2,而非你写的$3 - 表头未做筛选:原命令表头直接输出了行号加完整原表头,没有过滤为你需要的两列
修正后命令
awk -F';' 'BEGIN{OFS=";"} FNR==1{print "linenumber",$2;next} {print FNR-1,$2}' foo
命令说明
BEGIN{OFS=";"}:提前设置输出字段分隔符为分号,保证输出列之间用分号分隔FNR==1{print "linenumber",$2;next}:处理第一行表头时,直接输出行号列名+原第二列(也就是你要的新增后第三列的表头B),跳过后续逻辑{print FNR-1,$2}:处理数据行时,输出行号(第一行是表头,所以行号为当前行号减1)+ 原第二列的值
内容的提问来源于stack exchange,提问作者Forge
相关产品推荐
相关产品推荐

