如何修复awk脚本以删除第一列含*字符的文本行
awk代码修改说明
原代码错误点
- 分隔符配置错误:你指定制表符
\t作为字段分隔符,若实际输入为空格分隔会导致第一列识别异常 - 匹配逻辑错误:
$1 == '*'是判断第一列完全等于*,并非判断第一列包含*,且需求是删除含*的行,现有逻辑完全相反 - 输出逻辑错误:现有代码仅输出匹配到的含
*的行,还将分隔符替换为逗号,和预期输出需求相悖
正确可运行代码
无需额外复杂判断,直接使用以下代码即可:
awk '$1 !~ /\*/' infile.txt > outfile.txt
如果你的输入文件确实是制表符分隔,可保留分隔符参数:
awk -F '\t' '$1 !~ /\*/' infile.txt > outfile.txt
代码逻辑说明
- 默认使用任意空白字符作为字段分隔符,适配空格、制表符分隔的输入文件
$1 !~ /\*/为正则匹配规则:判断第一列不包含*字符,\*是对特殊通配符*的转义- awk默认规则为条件为真时输出整行,完全保留原文件的列分隔格式,输出结果和你给出的预期完全一致
内容的提问来源于stack exchange,提问作者bzmby
相关产品推荐
相关产品推荐

