3

OK、列の値に基づいて分割する必要がある csv ファイルがありますが、各ファイルにヘッダーを印刷することはできません。

現在私は使用しています:

awk "FS =\",\" {output=$3\".csv\"; print $0 > output}" test.csv

列 3 に基づいてファイル ファイルを分割しますが、各ファイルにヘッダーを追加する方法がわかりません。

ハイ&ローを検索しましたが、ワンライナーで機能するソリューションが見つかりません...

アップデート

これまでのところ、1 つのライナーが機能しています。

awk -F, "NR==1{hdr=$0;next}!($3 in files){files[$3]=1;print hdr>$3\".csv\"}{print>$3\".csv\"}" test.csv

または test.awk で:

BEGIN{FS=","} NR==1 {hdr=$0;next}!($3 in files) {files[$3]=1;print hdr>$3".csv"}{print>$3".csv"}

実行するコマンド:

awk -f test.awk test.csv

ここでの助けに本当に感謝しています。私は何時間も努力してきましたが、解決すべきことがいくつか残っています。

1) ヘッダーの後に挿入される空白行 2) 指定されたフィールドのデータを並べ替える

さらに行を数えて、別のファイルから参照番号をカットしたいのですが、これは AWK で可能ですか、それともジョブに間違ったツールを使用していますか?

再度、感謝します。

4

4 に答える 4

1

次のようなことを試してください:

awk -F, '
BEGIN {
    getline header
} 
{
    out=$3".csv"
    if (!($3 in seen)) { 
        print header > out 
    }
    print $0 > out
    seen[$3]
}' test.csv

Windows バージョン: (未テスト)

awk " FS =\",\"
BEGIN {
    getline header
} 
{
    out=$3\".csv\"
    if (!($3 in seen)) { 
        print header > out 
    }
    print $0 > out
    seen[$3]
}" test.csv
于 2013-05-28T15:06:30.680 に答える
1
awk -F, 'NR==1{h=$0;next}{out=$3".csv";
    if!(out in a)print h> out; print $0 > out;a[out]}' test.csv
于 2013-05-28T14:47:09.647 に答える
0
awk '{ output=$3".csv"; if( !($0 in a)) print "header" > output; a[$0]
    print > output}' FS=, test.csv
于 2013-05-28T14:43:00.713 に答える