乘以由数千列组成的文件中的特定列

乘以由数千列组成的文件中的特定列

文件内看起来像这样

-17.3644       0.00000000     0.00000000 ....
-17.2703       0.00000000     0.00000000 ....
-17.1761       0.00000000     0.00000000 ....
-16.5173       0.00000000     0.00000000 ....
-16.4232       0.00000000     0.00000000 ....

期望输出应该是

-173.644       0.00000000     0.00000000 ....
-172.703       0.00000000     0.00000000 ....
-171.761       0.00000000     0.00000000 ....
-165.173       0.00000000     0.00000000 ....
-164.232       0.00000000     0.00000000 ....

所以我想将第一列乘以 10,但同时保留其他 1000 列。如果awk '{print $1*10}' infile > outfile只打印第一列,我怎样才能保留其他列?

答案1

尝试

awk '{$1=$1*10 ; print }'

这将更改第一个参数,并打印整行。

要保持格式化为 3 位数字,请使用

awk '{$1=sprintf("%.3f",$1*10);print;}' 

答案2

用Python测试

#!/usr/bin/python
import re
k=open('p.txt','r')
for i in k:
    k=re.sub(' +',' ',i).split(' ')
    print float(k[0])*10,k[1],k[2]

输出

-173.644 0.00000000 0.00000000
-172.703 0.00000000 0.00000000
-171.761 0.00000000 0.00000000
-165.173 0.00000000 0.00000000
-164.232 0.00000000 0.00000000

答案3

$ < infile tr \- _ |
  dc -e "
    [q]sq
    [SMlN1+sNz1<a]sa
    [LMn32anlN1-dsN0<b]sb
    [?z0=q0sNlax.1/n32anlbx[]pclcx]sc
    3klcx
  "

输出:

-173.644 0 0 0 0 0 0 
-172.703 0 0 0 0 0 0 
-171.761 0 0 0 0 0 0 
-165.173 0 0 0 0 0 0 
-164.232 0 0 0 0 0 0

简要说明:

dc是一个逆波兰表示法RPN计算器,它将数据存储在其主堆栈上。将当前行的字段存储在命名堆栈 M 中,直到只剩下一个字段。将其除 .1 == 乘以 10 并对结果应用缩放。现在返回堆栈 M 并将未修改的当前行字段放回到主堆栈上。在我们将它们从 M 堆栈中弹出的同时,继续将它们打印到 stdout。在文件末尾或到达空行/空白行(以先发生者为准),我们退出。

相关内容