Bash

僅根據文本文件中的名稱獲取特定數據

  • October 14, 2017

假設我的文本文件包含:

101    Adam
201    Clarie
502    Adam
403    Tom

我想在 shell 中編寫一個命令,只給我基於特定名稱的數字。例如,僅輸出名稱“Adam”的數字將給出:

101
502

我在想類似的東西:

cut -f 1 Data_1 | grep "Adam"

但它不起作用。Data_1 是文件名。1 指的是第一列。我是 Unix 新手,所以我會很感激對此的一些回饋。

您可以通過選項使用 singlegrep和 perl 環視擴展:-P

grep -Po '.*(?=Adam)' file

這將列印一行中的所有內容,直到單詞 Adam。

如果你只想要數字,不包括空格等,那麼:

grep -Po '[0-9]*(?=.*Adam)' file

建議awk用於此

  • 預設輸入欄位分隔符是一個或多個連續的空格,因此無需擔心空格/製表符分隔
  • 更容易比較固定字元串(即不太容易出現正則表達式元字元 - 在構造帶有引號和反斜杠字元的字元串時需要小心。另見轉義序列
$ cat ip.txt
101    Adam
201    Clarie
502    Adam
403    Tom

$ # check if 2nd column value is Adam (wont match MAdam, Adama, etc)
$ # use $NF instead of $2 to check against last column
$ awk '$2=="Adam"{print $1}' ip.txt
101
502

$ # using variable instead of string constant
$ awk -v name='Adam' '$2==name{print $1}' ip.txt
101
502

$ # passing shell variable
$ n='Tom'
$ awk -v name="$n" '$2==name{print $1}' ip.txt
403

引用自:https://unix.stackexchange.com/questions/398064