文件内看起来像这样
-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。在文件末尾或到达空行/空白行(以先发生者为准),我们退出。