2013-06-03 26 views
0

嗨,我有作爲如何使用Windows的bash

=====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 

從這個我想根據筆者分割數據的文本文件sampple.txt解壓在一個文件上的字符串匹配文本的記錄,它應該分裂成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的文件爲s分類ub文件基於作者字段動態請建議我一個辦法做到這一點。

+0

應該'=== recordx'線也將在輸出文件? – Kent

回答

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: 
+0

+1你說得對。我甚至沒有想到這一點。 –

+0

感謝它的工作很好,可以請你解釋我的命令,因爲這個文本文件只有它正在工作,但我想從文件中提取數據,其中字段的位置和沒有filelds不恆定,一些記錄可能有3,4個字段和有些可能有6,7個字段,根據「作者」字符串它應該檢索整個記錄,這可能嗎?你可以建議我怎麼做這種文件? –

+0

請找到修改後的問題(更改我的sample.txt文件) –