大容量データファイルから列範囲を抽出/コピー

大容量データファイルから列範囲を抽出/コピー

大容量ファイルから列を抽出して新しいファイルに貼り付けて、データファイルを準備しようとしています。

そのデータの列数が非常に多いです。データを分割して複数のデータファイルを準備したいと思います。
以下のスクリプトを試していますが、動作しません。コピーする列の範囲を指定すると、エラーが発生すると予想されました。

#!/bin/bash

paste <(awk '{print $1,$2,$3,...$19,$20}' Precipitation.csv ) > aaaaa1
paste <(awk '{print $21,$22,$23,...$39,$40}' Precipitation.csv ) > aaaaa2 
paste <(awk '{print $41,$42,$43,...$99,$100}' Precipitation.csv ) > aaaaa3 

コードを修正するのに役立ちますか?

ベストアンサー1

これはケースのようです。cut以下より良いでしょうawk

cut -d , -f1-20 Precipitation.csv > aaa1
cut -d , -f21-40 Precipitation.csv > aaa2
cut -d , -f41-100 Precipitation.csv > aaa3

-d ,区切り文字(カンマ、入力をCSVと呼びますが変更できます)を指定します。含めて、-f N-M出力に表示するフィールドを選択します。フィールドにカンマが含まれていると破損する可能性があります。この場合、実際のCSVパーサーが必要になるかもしれませんが、実際に不可能な場合は何かを一緒に投げることができます。NM

出力は入力と同じ区切り文字を使用します。 GNUのcutサポート--output-delimiter=STRING別の区切り文字を設定するオプションがありますが、他の人はそうしないようです。 FreeBSDにはcut以下が含まれます-wスペースで分割オプションがawkデフォルト値に近い。これらの動作の1つを他の場所で実装するには、区切り文字の前/後を変換するのがおそらく最善の選択です。

おすすめ記事