2011-08-19 29 views
1

我試圖使用csplit命令來分割3個字符串分隔符的文件,但我遇到了問題。我沒有讓cplist與分隔符列表一起工作。 這就是我想出來:csplit命令中的正則表達式中有超過1個分隔符

我有這個文件:

TRANSHEADER002_XA 
XAL1 
XAL2 
XAL3 
TRANSHEADER001_EXEC 
EXECL1 
EXECL2 
EXECL3 
TRANSHEADER003_YB 
YBL1 
YBL2 
YBL3 
TRANSHEADER002_XA 
XAL1A 
XAL2A 
XAL3A 

這些字符串分隔符

TRANSHEADER002_XA 
TRANSHEADER001_EXEC 
TRANSHEADER003_YB 

但是當我嘗試喲使用我沒有得到成功具有多於1個定界符csplit可命令如下

csplit -k -s -f "$file"_split. "$file" "/^\(TRANSHEADER002_XA\|TRANSHEADER001_EXEC\|TRANSHEADER003_YB\)/" "{999}" 
csplit -k -s -f "$file"_split. "$file" "/^(TRANSHEADER002_XA|TRANSHEADER001_EXEC|TRANSHEADER003_YB)/" "{999}" 
csplit -k -s -f "$file"_split. "$file" "/^TRANSHEADER002_XA|^TRANSHEADER001_EXEC|^TRANSHEADER003_YB/" "{999}" 

我得到一個「超出範圍」的錯誤像下面的任何命令的上述

/^\(TRANSHEADER002_XA\|TRANSHEADER001_EXEC\|TRANSHEADER003_YB\)/ - out of range 

我想分裂像下面

--> file_split.01 
TRANSHEADER002_XA 
XAL1 
XAL2 
XAL3 

--> file_split.02 
TRANSHEADER001_EXEC 
EXECL1 
EXECL2 
EXECL3 

--> file_split.03 
TRANSHEADER003_YB 
YBL1 
YBL2 
YBL3 

--> file_split.04 
TRANSHEADER002_XA 
XAL1A 
XAL2A 
XAL3A 

。你們知道我怎麼能做到這一點的文件,通過使用則csplit或使用會送給另一個命令我像我上面顯示的分割文件?

非常感謝!

回答

0

你不應該重複圖案999次,但使用設計成需要重複多次的選項:{*}

csplit -kszf "$file"_split. "$file" "/^TRANSHEADER002_XA\|TRANSHEADER001_EXEC\|TRANSHEADER003_YB/" "{*}" 

而且使用-z選項刪除空的輸出文件。

+0

我「則csplit:非法重複計數:{*}」和「則csplit:非法選項 - Z」 然後我嘗試這種方式對於上面的例子文件: csplit -ksf「$ file」_split。 「$ file」「/^TRANSHEADER002_XA \ | TRANSHEADER001_EXEC \ | TRANSHEADER003_YB /」「{3}」 和 csplit -ksf「$ file」_split。 「$文件」 「/^TRANSHEADER002_XA | TRANSHEADER001_EXEC | TRANSHEADER003_YB /」, 「{3}」 都失敗,同樣超出範圍 則csplit:/^TRANSHEADERIBMAPU001_NA \ | TRANSHEADERIBMAPU002_EMEA \ | TRANSHEADERIBMAPU003_AP/- 超出範圍 – Jose

0

與您的樣本文件這個工作對我來說:

csplit -zksf file_split. csplit.test.txt '/^TRANSHEADER\(002_XA\|001_EXEC\|003_YB\)/' '{*}' 

使用{*}消除了超範圍的錯誤,因爲它多次匹配,因爲它可以,而不是正好試圖999次。

我也減少了你的正則表達式,但那不重要。

(我看到米哈爾打我這個)

+0

沒」爲我工作。我有錯誤 csplit:/^TRANSHEADER \(002_XA \ | 001_EXEC \ | 003_YB \)/ - 超出範圍 – Jose

+0

@Jose - 我用'csplit(GNU coreutils)5.97'做了這個 - 通過運行'csplit - 版本 - 你使用什麼版本,在Unix上有什麼特色? –

+0

事實上,如果你不在Linux上,你甚至可能沒有'--version'參數。 –