从字符串中剪切数字
Cut number from string
我想从 .txt
文件中剪切几个数字以便稍后添加。这是 .txt
文件的摘要:
anonuser pts/25 127.0.0.1 Mon Nov 16 17:24 - crash (10+23:07)
我想在“+”之前得到“10”,我只想要数字,没有别的。此数字应写入另一个 .txt
文件。我使用了这个代码,但只有当数字只有一位时它才有效:
awk ' /^'anonuser' / {split($NF,k,"[(+0:)][0-9][0-9]");print k[1]} ' log2.txt > log3.txt
使用 GNU grep:
grep -Po '\(\K[^+]*' file > new_file
输出到new_file:
10
如果在awk
中使用match()
函数会怎么样?
$ awk '/^anonuser/ && match($NF,/^\(([0-9]*)/,a) {print a[1]}' file
10
这是如何工作的?
/^anonuser/ && match() {print a[1]}
如果该行以 anonuser
开头并且找到了模式,则打印它。
match($NF,/^\(([0-9]*)/,a)
在最后一个字段 ((10+23:07)
) 中,查找字符串 (
+ 数字并将它们捕获到数组 a[]
. 中
另请注意,此方法允许您存储捕获的值,以便您可以按照问题中的说明对它们求和。
以下使用与 OP 相同的方法,并且有几个优点,例如它不需要任何特殊的东西,而且它非常健壮(关于输入的假设)并且可维护:
awk '/^anonuser/ {split($NF,k,/+/); gsub(/[^0-9]/,"",k[1]); print k[1]}'
对于任何更复杂的事情,使用 awk
但对于简单的任务 sed
就足够了
sed -r '/^anonuser/{s/.*\(([0-9]+)\+.*//}'
找出 (
和 +
符号之间的数字。
我不确定文件中的格式。
可以使用简单的剪切命令吗?
cut -d"(" -f2 log2.txt| cut -d"+" -f1 > log3.txt
我想从 .txt
文件中剪切几个数字以便稍后添加。这是 .txt
文件的摘要:
anonuser pts/25 127.0.0.1 Mon Nov 16 17:24 - crash (10+23:07)
我想在“+”之前得到“10”,我只想要数字,没有别的。此数字应写入另一个 .txt
文件。我使用了这个代码,但只有当数字只有一位时它才有效:
awk ' /^'anonuser' / {split($NF,k,"[(+0:)][0-9][0-9]");print k[1]} ' log2.txt > log3.txt
使用 GNU grep:
grep -Po '\(\K[^+]*' file > new_file
输出到new_file:
10
如果在awk
中使用match()
函数会怎么样?
$ awk '/^anonuser/ && match($NF,/^\(([0-9]*)/,a) {print a[1]}' file
10
这是如何工作的?
/^anonuser/ && match() {print a[1]}
如果该行以anonuser
开头并且找到了模式,则打印它。match($NF,/^\(([0-9]*)/,a)
在最后一个字段 ((10+23:07)
) 中,查找字符串(
+ 数字并将它们捕获到数组a[]
. 中
另请注意,此方法允许您存储捕获的值,以便您可以按照问题中的说明对它们求和。
以下使用与 OP 相同的方法,并且有几个优点,例如它不需要任何特殊的东西,而且它非常健壮(关于输入的假设)并且可维护:
awk '/^anonuser/ {split($NF,k,/+/); gsub(/[^0-9]/,"",k[1]); print k[1]}'
对于任何更复杂的事情,使用 awk
但对于简单的任务 sed
就足够了
sed -r '/^anonuser/{s/.*\(([0-9]+)\+.*//}'
找出 (
和 +
符号之间的数字。
我不确定文件中的格式。
可以使用简单的剪切命令吗?
cut -d"(" -f2 log2.txt| cut -d"+" -f1 > log3.txt