我正在尝试使用csplit命令将文件拆分为3个字符串分隔符,但我遇到了问题。我没有得到cplist来处理分隔符列表。 这是我正在尝试的:
我有这个文件:
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 :(得分:0)
你不应该重复这种模式999次,而是使用一个可以根据需要重复多次的选项:{*}
:
csplit -kszf "$file"_split. "$file" "/^TRANSHEADER002_XA\|TRANSHEADER001_EXEC\|TRANSHEADER003_YB/" "{*}"
还可以使用-z
选项删除空输出文件。
答案 1 :(得分:0)
使用您的示例文件,这对我有用:
csplit -zksf file_split. csplit.test.txt '/^TRANSHEADER\(002_XA\|001_EXEC\|003_YB\)/' '{*}'
使用{*}
消除了超出范围的错误,因为它尽可能多地匹配,而不是完全尝试999次。
我也减少了你的正则表达式,但这不是重点。
(我看到Michal打败了我)