Bash 在unix中将数据拆分为单独的文件

Bash 在unix中将数据拆分为单独的文件,bash,awk,sed,Bash,Awk,Sed,我有以下格式的数据 _id : ANC,Name : TEST,actn : Testing,date : 2018-0208 | _id : ANC,Name : TEST,actn : Testing,date : 2018-0208 > _id : ANC,Name : TEST,actn : Testing,date : 2018-0209

我有以下格式的数据

 _id :  ANC,Name : TEST,actn : Testing,date : 2018-0208   |    _id :  ANC,Name : TEST,actn : Testing,date : 2018-0208
                                                          >    _id :  ANC,Name : TEST,actn : Testing,date : 2018-0209
 _id :  ANC,Name : TEST,actn : Testing,date : 2018-0210   <   
\u id:ANC,名称:TEST,actn:Testing,日期:2018-0208 | \u id:ANC,名称:TEST,actn:Testing,日期:2018-0208
>\u id:ANC,名称:试验,行动:试验,日期:2018-0209
_id:ANC,名称:试验,行动:试验,日期:2018-0210
我想根据以下条件将数据拆分为单独的文件:--

在|之前的任何内容都应该放在文件1中,在|之后的任何内容都应该放在文件2中。
>之后的任何内容都应包含在文件2中
<之前的任何内容都应放在文件1中
因此,在结尾处,文件将如下所示:--

文件1:--
_id:ANC,名称:试验,行动:试验,日期:2018-0208
_id:ANC,名称:试验,行动:试验,日期:2018-0210
文件2
_id:ANC,名称:试验,行动:试验,日期:2018-0208
_id:ANC,名称:试验,行动:试验,日期:2018-0209

我试着用sed来做
sed的/|.*/'test.txt
但不幸的是,我无法添加所有条件,因此数据变得混乱


关于。

单向使用,
awk
,因为您基本上有两列(假设没有其他
|,
):


然后只需使用
cut-d'|'-f1>file1
就可以了。对于文件2也是如此-尽管您会有空行。您也可以使用bash循环并轻松地逐行迭代,将行拆分为一个分隔符,但我认为这里的
awk
非常合适。

使用
awk
的一种方法,因为您基本上有两列(假设没有其他的
):


然后只需使用
cut-d'|'-f1>file1
就可以了。对于文件2也是如此-尽管您会有空行。此外,您还可以使用bash循环并轻松地逐行迭代,将行拆分为其中一个分隔符,但我认为这里的
awk
非常适合。

遵循简单的
awk
也可能对您有所帮助

awk -F'[|><]' '{gsub(/^ +| +$/,"")}$1{print $1 > "file1"} $2{print $2 > "file2"}'    Input_file
awk-F'[|>“file1”}$2{print$2>“file2”}输入文件

遵循简单的
awk
也可能对您有所帮助

awk -F'[|><]' '{gsub(/^ +| +$/,"")}$1{print $1 > "file1"} $2{print $2 > "file2"}'    Input_file
awk-F'[|>“file1”}$2{print$2>“file2”}输入文件

Awk
解决方案:

awk '{ for (i=1; i<=2; i++) if ($i) print $i > "file"i }' \
       FS='[[:space:]][[:space:]]+[|<>][[:space:]][[:space:]]+' file
awk'{for(i=1;i“file”i}'\
FS='[[:space:][[:space:][]+[[:space:][][[:space:][]+'文件
查看结果:

$ head file[12]
==> file1 <==
_id :  ANC,Name : TEST,actn : Testing,date : 2018-0208
 _id :  ANC,Name : TEST,actn : Testing,date : 2018-0210

==> file2 <==
_id :  ANC,Name : TEST,actn : Testing,date : 2018-0208
_id :  ANC,Name : TEST,actn : Testing,date : 2018-0209
$head文件[12]

==>file1 file2
Awk
解决方案:

awk '{ for (i=1; i<=2; i++) if ($i) print $i > "file"i }' \
       FS='[[:space:]][[:space:]]+[|<>][[:space:]][[:space:]]+' file
awk'{for(i=1;i“file”i}'\
FS='[[:space:][[:space:][]+[[:space:][][[:space:][]+'文件
查看结果:

$ head file[12]
==> file1 <==
_id :  ANC,Name : TEST,actn : Testing,date : 2018-0208
 _id :  ANC,Name : TEST,actn : Testing,date : 2018-0210

==> file2 <==
_id :  ANC,Name : TEST,actn : Testing,date : 2018-0208
_id :  ANC,Name : TEST,actn : Testing,date : 2018-0209
$head文件[12]
==>文件1文件2