我想从.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
答案 0 :(得分:4)
答案 1 :(得分:0)
如果您使用match()
中的awk
功能怎么办?
$ 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[]
中捕获这些数字。另请注意,此方法允许您存储捕获的值,以便您可以在问题中指示它们进行求和。
答案 2 :(得分:0)
以下使用与OP相同的方法,并且具有一些优点,例如它不需要任何特殊的东西,它非常强大(关于输入的假设)和可维护性:
awk '/^anonuser/ {split($NF,k,/+/); gsub(/[^0-9]/,"",k[1]); print k[1]}'
答案 3 :(得分:0)
对于任何更复杂的使用awk
,但对于简单的任务sed
来说很容易
sed -r '/^anonuser/{s/.*\(([0-9]+)\+.*/\1/}'
查找(
和+
符号之间的数字。