【发布时间】:2017-11-01 11:35:33
【问题描述】:
文件中有几行如下所示:
A B C H
A B C D
并且,我想打印包含此 RE 的所有行:
/A\tB/
但是,如果该行在第四个字段中包含和H,则不要打印,输出将是:
A B C D
可以sed、awk、grep写成一行?
我唯一知道的是:
awk '/^A\tB/'
【问题讨论】:
文件中有几行如下所示:
A B C H
A B C D
并且,我想打印包含此 RE 的所有行:
/A\tB/
但是,如果该行在第四个字段中包含和H,则不要打印,输出将是:
A B C D
可以sed、awk、grep写成一行?
我唯一知道的是:
awk '/^A\tB/'
【问题讨论】:
这将起作用:
awk '$1$2 == "AB" && $4 != "H"' file
如果所有条目都是单个字符,这也可以:
awk '$1$2$3$4 ~ /^AB.[^H]/' file
【讨论】:
使用 awk 单行:
awk -F'\t' '$1=="A" && $2=="B" && $4!="H"' file
-F'\t' - 制表符 \t 被视为字段分隔符输出:
A B C D
【讨论】:
这可能对你有用(GNU sed):
sed '/^A\tB\t.\t[^H]/!d' file
如果一行不包含A、B、任何字符以及H以外的其他字符,并用制表符分隔,则将其删除。
可以写成:
sed -n '/^A\tB\t.\t[^H]/p' file
【讨论】:
使用这个。
awk '/^A\tB/ { if ( $4 != "H" ) print }'
【讨论】:
' 应该在最后一个 } 之后...可以简化并为第二列 awk '/^A\tB\t/ && $4 != "H"' 提供更强大的匹配