从文件中查找字符串后的整数值

从文件中查找字符串后的整数值

我想从文件中获取特定字符串后的整数值并对所有整数进行排序。例如 - 我有一个包含数千行字符串权重的文件,

-weight 100
-weight 200
-weight 20

我想按排序顺序获取所有整数值。

答案1

如果您要搜索行上最后一个最长的数字串,则可以使用grep

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

指示仅打印行的匹配部分,并启用 Perl 兼容正则表达式。PCRE 让我们使用-o“一个或多个数字”和“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

告诉\Kgrep包括到此时匹配的任何内容,所以上面的命令只会打印后面最长的数字-weight和 0 个或更多空格。

请注意,如果您还想包含负数或小数,则需要:

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”后面的数字以及后面的“空格”。
  • | sort -n:将输出通过管道传输到排序命令中并按数值排序。

相关内容