我陷入了一个棘手的境地。我有一个文件,其内容如下所示:
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
但是,如果用户输入labelNum
2,那么我得到:
2017-05-30
2017-05-27
2017-05-27
因为它在 .txt 文件中到处寻找“2”。但是,我想要第 2 列为labelNum
2,即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 内部的转义很棘手。