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 file2Awk
解决方案:
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