如何从末尾打印第三个单词来打印数字:
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
更改:替换是空字符串而不是空格,以便只获得数字,而不是具有大量前导和尾随空格的数字,tmp
是print
ed,它确实包含更改后的字符串,没有创建num
,因为您不使用行中的非数字字符数量。
(在gawk 4.2.1中测试(
为了确保您仅从倒数第三列提取数字,您可以尝试以下操作:
D_11在最后一行的echo "${test_1}nnalpha567beta delta omicron gamma epsilon mu phi sigma"
$1
中的567
现在被正确地跳过
- 注意:这使得假设
$(NF-2)
中只存在没有小数点或科学记数法的无格式无符号整数。如果那里还存在其他内容,则不会为该行生成打印输出