AWK打印如果找到三个匹配,一个错误

时间:2017-11-01 11:35:34

标签: bash awk sed grep

文件中有几行看起来像:

A   B   C   H
A   B   C   D

并且,我想要打印包含此RE的所有行:

/A\tB/

但是,如果第四个字段中的行包含H,请不要打印,输出将为:

A   B   C   D

它可以用sed,awk或grep写成一行吗?

我唯一知道的是:

awk '/^A\tB/'

4 个答案:

答案 0 :(得分:4)

这将有效:

awk '$1$2$3$4 ~ /^AB.[^H]/' file

如果所有条目都是单个字符,这也可以起作用:

// the one needed to update with timestamp appended
image += "?"+String.valueOf(System.currentTimeMillis());
Glide.with(mContext.getApplicationContext())
        .load(image)
        .error(R.drawable.default_avatar)
        .centerCrop()
        .crossFade()
        .into(((VideoViewHolder) holder).img);

// the others don't need to update
Glide.with(mContext.getApplicationContext())
        .load(image)
        .error(R.drawable.default_avatar)
        .centerCrop()
        .crossFade()
        .into(((VideoViewHolder) holder).img);

答案 1 :(得分:2)

使用 awk 单行:

awk -F'\t' '$1=="A" && $2=="B" && $4!="H"' file
  • -F'\t' - 标签字符\t被视为字段分隔符

输出:

A   B   C   D

答案 2 :(得分:2)

这可能适合你(GNU sed):

sed  '/^A\tB\t.\t[^H]/!d' file

如果某行不包含AB,除了H以外的任何字符和字符,请将其删除。

可写:

 sed  -n '/^A\tB\t.\t[^H]/p' file

答案 3 :(得分:1)

使用此功能。

awk '/^A\tB/ { if ( $4 != "H" ) print }'