Grep 查找特定元素

Grep 查找特定元素

我陷入了一个棘手的境地。我有一个文件,其内容如下所示:

3               2017-05-30      2017-09-29
2               2017-05-27      2017-08-26
1               2017-05-27      2017-08-26

现在,用户选择通过选择 labelNum 来修改日期,该 labelNum 将是第 1 列中的值。根据提示,如果用户输入 3。我想打印第 2 列。

所以我写了。

cat temp.txt | grep $labelNum | awk '{print $2}'

如果labelNum是 3,我得到的输出为2017-05-30

但是,如果用户输入labelNum2,那么我得到:

2017-05-30
2017-05-27
2017-05-27

因为它在 .txt 文件中到处寻找“2”。但是,我想要第 2 列为labelNum2,即2017-05-27

有没有办法做到这一点?我尝试使用 awk 代替 grep 但没有成功。

谢谢。

编辑:行是动态的,并且可以随着更多条目添加到文本文件中而改变。所以不能真正使用 sed 跳到该行

答案1

与单awk

awk -v lbl=$labelNum '$1 == lbl{ print $2 }' temp.txt

  • -v lbl=$labelNum- 将变量值传递labelNum到 awk 脚本中

  • $1 == lbl- 如果第一列值等于变量值 - 执行后面的表达式

答案2

您还可以保留您的解决方案:

cat temp.txt | grep ^$labelNum | awk '{print $2}'

它将在行的开头匹配,或者

awk '/^'$labelNum'/{print $2}' temp.txt

工作方式类似,但是 awk 内部的转义很棘手。

相关内容