2016-07-06 7 views
1

私は非常に大きい.txtを持っています。どのくらいの情報が保存されているかを調べるために、データを操作する必要があります。私は本質的に、データのすべての個々の点を合計する必要があります。問題は、すべてのデータが列に格納されていることと、Linuxのコマンドを正しく実行する方法がわかりません。ファイルの大きな.txtまたは.csvの合計カラムLinux

パート:

header:                 
    seq: 0                 
    stamp:                 
    secs: 1467830307                 
    nsecs: 890825036                 
    frame_id: map                
info:                
    map_load_time:                 
    secs: 0                
    nsecs:   0                 
    resolution: 0.0500000007451                
    width: 7200                
    height: 7200                
    origin:                
    position:                
     x: -180.0                
     y: -180.0                
     z: 0.0                 
    orientation:                 
     x: 0.0                 
     y: 0.0                 
     z: 0.0                 
     w: 1.0                 
data: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 

は、実際のファイルがこれよりもはるかに大きいですが、基本的に私はその「データ」セット内の数字のすべてを追加する必要があります(すべてが他に削除することができます) 。 ありがとうございます。

+0

を私たちはあなたのファイルがどのようなものかを理解することができるようにあなたの質問をフォーマットしてください。実際には "Header:"または "Data:"という行がありますか?そうでなければ、ファイルのサンプルを貼り付けることができます。いくつかのレコード。そしてそれをコードとしてフォーマットして、それを読むことができます。 – JNevill

+0

申し訳ありませんが、私はそれが今では少し分かりやすいはずだと思います。すべて(ヘッダー、情報など)は実際のファイルの一部です。私はそれを削除し、データラインしか持っていないと思っていましたが、それを合計しようとしました。 – Miscott

+0

'data'は常にファイルの最後のものですか?ファイル内の '[...]'内のデータは常に唯一のものですか? –

答えて

1

ファイルがdata.txt呼ばれると仮定すると、私はこのようなawkを使用するには:

awk ' 
    /^data:/ {f=1} 
    f==1  {gsub(/[a-zA-Z:\[\]]/,""); for(i=1;i<=NF;i++)t+=$i} 
    END  {print t} 
' data.txt 

時に、あなたのファイルdata.txt 1行を読み取ります。行の先頭にdata:という単語があると、fというフラグが設定されているので、は "知られています"がファイルの先頭にあることを知っており、数値を集計する必要があります。

data:の後には、f==1という接頭辞が付いているため、次の部分だけが表示されます。これは、gsub()を使用して、行からすべての文字、コロン、角括弧を削除します。次に、行のすべてのフィールド(NFはフィールドの数)をループし、tという変数に要素を集計します。

ファイルの最後に、ENDで始まるセクションが実行され、合計が出力されます。ご希望の場合は

次のような1行にすべてを書くことができます:

awk '/^data:/{f=1} f==1{gsub(/[a-zA-Z:\[\]]/,"");for(i=1;i<=NF;i++)t+=$i} END{print t}' data.txt 
+0

素晴らしい、ありがとう! – Miscott

+0

すべての文字を削除すると、それはNFを再計算しますか?そうでなければ、データで始まる行は次の行と整列しません(つまり、 "data"行は "column + 1"の値を開始時のデータなしの行と比較して)...(iow、最初の0この例では列2にあり、col1も0と解釈されます) –

+0

申し訳ありませんが、opにはすべてのフラットな加算が必要であり、列ごとの合計は必要でないことは理解できませんでしたコメントは考慮する必要があります。ここでは問題ありません。 ""($ 1、かつては "data")を追加すると合計に0が追加されるので、結果は正しいです。 –

関連する問題