如何打印第2列中数字的第二个小数位,UNIX

mbjcgjjk  于 2022-11-23  发布在  Unix
关注(0)|答案(3)|浏览(156)

好的,我是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}'文件

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

我应该使用nawk命令还是有更好的命令?
如果我能得到任何帮助,我非常感激!

4ktjp1zp

4ktjp1zp1#

我会以如下方式利用GNU AWK,让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

说明:对于第1行(NR>1)以外的行,将第2场值乘以100,然后取(%)除以10的余数。

  • (在GNU Awk 5.0.1中测试)*
qkf9rpyu

qkf9rpyu3#

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

$ 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

相关问题