從檔案中尋找字串後面的整數值

從檔案中尋找字串後面的整數值

我想從文件中獲取特定字串後面的整數值並對所有整數進行排序。例如 - 我有一個包含數千行字串重量的文件,

-weight 100
-weight 200
-weight 20

我想按排序順序來取得所有整數值。

答案1

如果您正在搜尋最長的數字字串,即該行的最後一件事,您可以使用grep

$ grep -oP '\d+\s*$' file 
100
200
20

指示僅列印該行的符合部分並啟用 Perl 相容正規表示式-o。PCRE 讓我們可以使用「一個或多個數字」和「0 個或多個空白字元」。因此,總而言之,該命令將列印在行末尾找到的最長的數字。grep-P\d+\s*

如果您需要對它們進行排序,只需通過sort

$ grep -oP '\d+\s*$' file | sort -n
20
100
200

相反,如果您需要使用特定字串來錨定模式,請使用:

$ grep -oP -- '-weight\s+\K\d+' file | sort -n
20
100
200

告訴不要包含到目前為止匹配的任何內容,因此上面的命令只會列印和 0 個或多個空格之後\K的最長數字。grep-weight

請注意,如果您還想包含負數或小數,則需要:

grep -oP -- '-weight\s+\K[0-9,-]+' file | sort -n

例如:

$ cat file 
-weight 100
-weight 200
-weight 20
-weight -29
-weight -32.4

$ grep -oP -- '-weight\s+\K[0-9,-]+' file | sort -n
-32
-29
20
100
200

答案2

嘗試這個:

cut -d ' ' -f2 inputfile|sort -n

-d ' '- 將分隔符號設為空格
-f2- 取得第二列
sort -n- 將結果排序為數字
測試結果:

20
100
200

答案3

嘗試這個 sed 指令:

sed -E 's/^.*weight\s([[:digit:]]*).*/\1/' sort.txt  | sort -n

或者

sed -E 's/.*weight\s([0-9]*).*/\1/' sort.txt | sort -n

測試用例:

-weight 100 
-weight 200 
-weight 20

結果:

20
100 
200

注意:-你沒有給出一個好的測試案例,所以我假設了我的。

資訊:

  • ^.*weight\s([[:digit:]]):閱讀每一行並捕獲單字“weight”後面帶有“space”的數字。
  • | sort -n:將輸出傳送到排序命令並按數值排序。

相關內容