Bash
僅根據文本文件中的名稱獲取特定數據
假設我的文本文件包含:
101 Adam 201 Clarie 502 Adam 403 Tom
我想在 shell 中編寫一個命令,只給我基於特定名稱的數字。例如,僅輸出名稱“Adam”的數字將給出:
101 502
我在想類似的東西:
cut -f 1 Data_1 | grep "Adam"
但它不起作用。Data_1 是文件名。1 指的是第一列。我是 Unix 新手,所以我會很感激對此的一些回饋。
您可以通過選項使用 single
grep
和 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