我想从文件中获取特定字符串后的整数值并对所有整数进行排序。例如 - 我有一个包含数千行字符串权重的文件,
-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
告诉\K
不grep
包括到此时匹配的任何内容,所以上面的命令只会打印后面最长的数字-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
:将输出通过管道传输到排序命令中并按数值排序。