大容量ファイルから列を抽出して新しいファイルに貼り付けて、データファイルを準備しようとしています。
そのデータの列数が非常に多いです。データを分割して複数のデータファイルを準備したいと思います。
以下のスクリプトを試していますが、動作しません。コピーする列の範囲を指定すると、エラーが発生すると予想されました。
#!/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パーサーが必要になるかもしれませんが、実際に不可能な場合は何かを一緒に投げることができます。N
M
出力は入力と同じ区切り文字を使用します。 GNUのcut
サポート--output-delimiter=STRING
別の区切り文字を設定するオプションがありますが、他の人はそうしないようです。 FreeBSDにはcut
以下が含まれます-w
スペースで分割オプションがawk
デフォルト値に近い。これらの動作の1つを他の場所で実装するには、区切り文字の前/後を変換するのがおそらく最善の選択です。