仅当第二字段匹配字符串时,如何获取文件的第一字段?

时间:2020-07-10 13:13:09

标签: linux awk

仅当第二字段与给定字符串匹配时,如何获取文件的第一字段?

#cat temp.txt

Ankit   pass
amit    pass
aman    fail
abhay   pass
asha    fail
ashu    fail

cat temp.txt | awk -F"\t" '$2 == "fail" { print $1 }'*

不提供任何输出

3 个答案:

答案 0 :(得分:0)

当我最后删除*时,您的代码似乎可以正常工作

cat temp.txt | awk -F"\t" '$2 == "fail" { print $1 }'

要检查的另一件事是文件是否使用制表符或空格。我的数据文件复制/粘贴复制了空格,因此我需要这一行:

cat temp.txt | awk '$2 == "fail" { print $1 }'

另一种方法是使用grep:

cat temp.txt | grep fail$ | awk '{ print $1 }'

答案 1 :(得分:0)

awk的另一种语法:

awk '$2 ~ /^faild$/{print $1}' input_file

已删除的“猫”命令。

  • ^起始字符串
  • $结束字符串

这是匹配彭定康的最佳方法。

答案 2 :(得分:0)

要么:

  1. 您的字段不是制表符分隔的或
  2. 相关行的末尾有空格或
  3. 您有DOS行尾,因此每个末尾都有CR 每行$ 2的末尾也是如此(请参见 Why does my tool output overwrite itself and how do I fix it?

使用GNU cat,您可以运行cat -Tev temp.txt来查看制表符(^I),CR(^M)和行尾($)。