我想從文件中獲取特定字串後面的整數值並對所有整數進行排序。例如 - 我有一個包含數千行字串重量的文件,
-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
:將輸出傳送到排序命令並按數值排序。