0

こんにちは、テキスト ファイル sample.txt があります。

    =====record1
    title:javabook
    price:$120
    author:john
    path:d:
    =====record2
    title:.netbook
    author:paul
    path:f:
    =====record3
    author:john
    title:phpbook
    subject:php
    path:f:
    price:$150
    =====record4
    title:phpbook
    subject:php
    path:f:
    price:$150

これから、作成者に基づいてデータを分割したいので、次を含む2つのファイルに分割する必要があります

test1.txt

=====record1
    title:javabook
    price:$120
    author:john
    path:d:
=====record3
    author:john
    title:phpbook
    subject:php
    path:f:
    price:$150

test2.txt

=====record2
    title:.netbook
    author:paul
    path:f:

上記のように、著者フィールドに基づいてメインの sample.txt ファイルをサブファイルに動的に分類したいので、その方法を教えてください。

4

1 に答える 1

1

この行を試してください:

awk -F: '{a[++i]=$0;if(i==3)f=$2}i==4{for(x=1;x<=i;x++)print a[x]>f".txt";i=0}' file

この行は、出力ファイルに作成者の名前を付けます。名前にスペースがある場合は、引用符で囲む必要があります。番号付きのテキスト ファイルが必要な場合も、行の読み取り中に配列を作成するだけで簡単です。何かのようなもの:

f['John']=1
f['Tom']=2
f['Jerry']=3
...

この行は、それがどのように機能するかを示しているだけです。

あなたのコンテンツfileを例として:

kent$  awk -F: '{a[++i]=$0;if(i==3)f=$2}i==4{for(x=1;x<=i;x++)print a[x]>f".txt";i=0}' file

kent$  head *.txt
==> john.txt <==
=====record1
title:javabook
author:john
path:d:
=====record3
title:javabook
author:john
path:f:

==> paul.txt <==
=====record2
title:.netbook
author:paul
path:f:
于 2013-06-03T14:12:59.027 に答える