scripts - 在文件中的字符串后面找到整数值
Tianye
・3 分钟阅读
问题
我想从文件中得到一个特定字符串后的整数值,并对所有整数排序。 例如 - 我有一个包含数千行字符串权重的文件,
-weight 100
-weight 200
-weight 20
我想按排序顺序获取所有整数值。
回答1
尝试这个:
cut -d ' ' -f2 inputfile|sort -n
-d''
-将分隔符设置为空格-f2
-获取第二列sort -n
-将结果排序为数字
测试结果:
20
100
200
回答2
请尝试以下命令:
sed -E 's/^.*weights([[:digit:]]*).*/1/' sort.txt | sort -n
或者
sed -E 's/.*weights([0-9]*).*/1/' sort.txt | sort -n
测试用例:
-weight 100
-weight 200
-weight 20
结果:
20
100 200
Note:-你没有给出一个好的测试用例所以,我假设。
信息:
^.*weights([[:digit:]])
:读每一行,然后用下面的"空间"捕获单词"权重"后面的数字,| sort -n
:将输出输出到排序命令中,并且按数值排序,
回答3
如果你正在搜索最长的数字字符串,那么你可以使用grep
:
$ grep -oP 'd+s*$' file
100
200
20
-o
告诉grep
只打印行的匹配部分,而-P
则支持Perl兼容的正规表达式,PCRE让我们将d+
用于"一个或多个数字",s*
用于"0个或更多空白字符",所以,总之,该命令将打印在行尾找到的最长的数字。
如果需要排序,只需通过sort
:
$ grep -oP 'd+s*$' file | sort -n
20
100
200
如果你需要使用特定的字符串来锚定模式,请使用:
$ grep -oP -- '-weights+Kd+' file | sort -n
20
100
200
k
告诉grep
。不要包含与此点匹配的任何内容,因此上面的命令只会在
-weight 和0或更多空格之后,打印最长的数字,
注意,如果你还要包含负数或小数,则需要:
grep -oP -- '-weights+K[0-9,-]+' file | sort -n
例如:
$ cat file
-weight 100
-weight 200
-weight 20
-weight -29
-weight -32.4
$ grep -oP -- '-weights+K[0-9,-]+' file | sort -n
-32
-29
20
100
200