列番号でファイルを分割する

列番号でファイルを分割する

10,671列のファイルがあります。

すべての列が印刷されるまで、file_transpose01、file_transpose02、... file_transpose10という名前の1000個の列を持つ10個の小さなファイルに分割しようとします。ファイルの最初の列を各新しいサブファイルの最初の列として印刷しています。

私はそれが可能であることを知っています行番号としてawkを使用する

NRの代わりにNFを使用して列に分割するようにこの方法を適用しようとしています。

awk 'BEGIN{$1;}NF%1000==2{x="masterfile_transposed"++i;a[i]=x;print f>x;}{print > x}' masterfile

しかし、エラーが発生します。

expression for `>' redirection has null string value. I am not sure what is wrong with my syntax. Is it possible to do this task using awk?

このアプローチをどのように機能させることができますか?それとも、より良いアプローチがありますか?

ベストアンサー1

awk -v ncols=1000 '
    {
        f=1
        file = "file_" f
        for (i=1; i <= NF; i++) {
            printf "%s%s", $i, OFS > file
            if (i % ncols == 0) {
                print "" > file
                f++
                file = "file_" f
            }
        }
        print "" > file
    }
' file

おすすめ記事