在包含数千列的文件中乘以特定列


0

in文件看起来像这样

-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您只打印第一列,我怎么能还保持其他列?

Answers:


2

尝试

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

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

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

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

要补充一点,如果有人也对awk'{$ 1 = sprintf(“%。3f”,$ 1 * 10); print}'格式感兴趣,那么
Dimitris Mintis

坦克,我用你的评论更新。
Archemar

0

用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

1
如果有1000列怎么办?
Prvt_Yadav

0
$ < 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。在文件末尾或到达空行/空白行时(以先发生者为准),我们退出。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.