我如何在awk中从末尾打印第三个单词来提取数字



如何从末尾打印第三个单词来打印数字:

alberto 123 brazil argantino
drakola almond 4567 beta alpha
dream delta 5671 earth england

我测试这个代码:

awk '{print ($0+0)}'

但不能和我一起工作。

结果:

123
4567
5671

我测试这个代码:

tmp=$0
num= gsub(/[^0-9]/, " ",tmp)
print substr($0, RSTART,RLENGTH), num, header   > result[value]

但是给我打错了号码。

您可以使用NF内置变量(字段数(减去2,例如

cat test.txt
alberto 123 brazil argantino
drakola almond 4567 beta alpha
dream delta 5671 earth england
awk '{print $(NF-2)}' test.txt
123
4567
5671

这能解决你的问题吗?

num= gsub(/[^0-9]/, " ",tmp)

给出(…(错误的数字

gsub函数确实会影响第三个参数和返回所做替换的数量,因此num是非数字字符的数量,我会按照以下方式修改您的代码,让file.txt的内容是

alberto 123 brazil argantino
drakola almond 4567 beta alpha
dream delta 5671 earth england

然后

awk '{tmp=$0;gsub(/[^0-9]/,"",tmp);print tmp}' file.txt

给出输出

123
4567
5671

更改:替换是空字符串而不是空格,以便只获得数字,而不是具有大量前导和尾随空格的数字,tmpprinted,它确实包含更改后的字符串,没有创建num,因为您不使用行中的非数字字符数量。

(在gawk 4.2.1中测试(

为了确保您从倒数第三列提取数字,您可以尝试以下操作:

echo "${test_1}nnalpha567beta delta omicron gamma epsilon mu phi sigma"
D_11在最后一行的$1中的567现在被正确地跳过
  • 注意:这使得假设$(NF-2)中只存在没有小数点或科学记数法的无格式无符号整数。如果那里还存在其他内容,则不会为该行生成打印输出

最新更新