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 列中的值。

所以我寫了。

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 內部的轉義很棘手。

相關內容