如何打印第2列中数字的小数点后第二位.UNIX



好的,我是Unix新手,我正在尝试学习Unix的基础知识。我有一个文件叫adafile,我试图配置,只是玩弄。我基本上想打印第二列(即1,3,5,6,4,6,2,4)中的数字的小数点后第二位的数字。

File Output:
3.0 .91 7 36 January JAN Wayne Smith
2.8 .83 4 17 February FEB Eric Kittle
5.1 .95 8 15 March MAR Morgan Leach
9.0 .76 7 19 April APR Jane Holder
3.5 .84 4 43 October OCT Victor Carter
5.2 .98 6 13 November NOV Michael John
4.5 .86 2 8 December DEC Harry Kaka
5.7 .96 4 13 September SEP Tim Simple

如何在不使用脚本的情况下完成此操作?我尝试使用命令:nawk '{print $2}' adafile

Output:
.91
.83
.95
.76
.84
.98
.86
.96
  • 但是我知道它会在第二列显示所有的内容。

我应该使用nawk命令还是有更好的命令?

如果我能得到任何帮助,我将不胜感激!

我将按照以下方式利用GNUAWK,让file.txt内容为

File Output:
3.0 .91 7 36 January JAN Wayne Smith
2.8 .83 4 17 February FEB Eric Kittle
5.1 .95 8 15 March MAR Morgan Leach
9.0 .76 7 19 April APR Jane Holder
3.5 .84 4 43 October OCT Victor Carter
5.2 .98 6 13 November NOV Michael John
4.5 .86 2 8 December DEC Harry Kaka
5.7 .96 4 13 September SEP Tim Simple

然后

awk 'NR>1{print $2*100%10}' file.txt

给输出

1
3
5
6
4
8
6
6

解释:对于超过第一行(NR>1)的行,将第二个字段值乘以100,然后取除(%)除以10的余数。

(在GNU Awk 5.0.1中测试)

UPDATE 1 :添加纯regex方法:

mawk NF=NF FS='^.+[.].| .+$' OFS=

——这也可以,但副作用是左侧有额外的空间

mawk NF=2 FS='^.+[.].| .+$'     
[ ] 1
3
5
6
4
8
6
6

——————————————————

gawk '$_ = substr($(_+=++_),_+--_,_--)'
nawk '$-__= substr($(_=NF),    _,!__)' FS='^.*[.]'
mawk '$!NF = substr($(_=NF),  _,!__)'  FS='^.*[.]'   
1
3
5
6
4
8
6
6

如果不使用脚本,我猜是:

$ cut -c7 file
1
3
5
6
4
8
6
6

从您发布的样本输入中获得发布的预期输出,但YMMV用于其他值,所以如果我是您,我会使用脚本,例如:

$ awk '{print ( match($2,/./) ? substr($2,RSTART+2,1)+0 : 0 )}' file
1
3
5
6
4
8
6
6

这将产生数字输出,即使$0中的值没有小数点或有,但后面只有1位而不是你的例子中的2位,例如:

$ cat file
3.0    .91  7 36 January JAN Wayne Smith
2.8    .8   4 17 February FEB Eric Kittle
5.7   2     4 13 September SEP Tim Simple

$ awk '{print ( match($2,/./) ? substr($2,RSTART+2,1)+0 : 0 )}' file
1
0
0

最新更新