次のデータファイルがあるとしましょう。
111 222 333
444 555 666
777 888 999
GNU Datamash を使用して、次のように各列の合計を計算できます。
cat foo | datamash -t\ sum 1 sum 2 sum 3
1332 1665 1998
データファイルの列数がわからない場合は、datamashを使用してこれをどのように実行しますか?
たとえば、フィールドセレクタcut
などの範囲終了記号をサポートしているので、この質問をします。-
ベストアンサー1
不明な範囲を指定するオプションは表示されません。データ混合ハンドブック
このperl
単一のライナーをお試しください
$ perl -lane '$s[$_]+=$F[$_] for 0..$#F; END{print join " ", @s}' ip.txt
1332 1665 1998
-a
オプションは自動的に入力行をスペースに分割し、結果を@F
配列に保存します。for 0..$#F
配列を繰り返して$#F
最後の要素のインデックスを提供する$s[$_]+=$F[$_]
合計を@s
配列に保存すると、デフォルトでは初期値は0
数値コンテキストにあります。$_
各反復にはインデックス値があります。END{print join " ", @s}
すべての入力行が処理されたら、@s
スペースを区切り文字として使用して配列の内容を印刷します。