数千の列で構成されるファイルから特定の列を掛けます。

数千の列で構成されるファイルから特定の列を掛けます。

ファイルは次のとおりです

-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フィールドが1つだけ残るまで、現在の行のフィールドを名前付きスタックMに保存します。 .1で割って== 10を掛け、結果にスケーリングを適用します。次に、Mスタックに戻り、変更されていない現在のラインフィールドをメインスタックに戻します。 Mスタックから取り出している間、stdoutとして印刷し続けます。ファイルの終わりまたは空白/空行に達すると(どちらか最初に発生した場合)、終了します。

関連情報