如何用gawk提取CSV指定许可证类型行并保留表头?
解决CSV提取表头+指定行的awk脚本问题
你的原脚本问题出在BEGIN块的逻辑上——BEGIN块是awk开始读取文件前执行的,这时候还没读任何行,NR(当前行号)的值是0,所以NR == 1这个条件根本不会触发,后面直接print $0就会输出一行空内容。同时真正的表头行(NR=1)因为不满足$7 ~ /"GEN12Z"/的条件,所以没被打印出来,才会出现开头空行、没表头的情况。
给你两个简单的修正方案:
方案一:分开处理表头和数据行
BEGIN { FS = OFS = "," } # 第一行直接打印表头,然后跳过后续判断 NR == 1 { print; next } # 数据行中第7列匹配指定模式的才打印 $7 ~ /"GEN12Z"/ { print }
方案二:合并条件更简洁
BEGIN { FS = OFS = "," } # 第一行(表头)或者第7列匹配模式的行,都打印 NR == 1 || $7 ~ /"GEN12Z"/ { print }
这两个脚本都会先输出表头,再输出所有第7列匹配"GEN12Z"的数据行,不会有空行问题。
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

