Bash脚本将文件拆分为两个文件,同时在处理过程中更改输出文件
我试图将一个文本文件拆分为两个不同的文件,该文件如下所示:Bash脚本将文件拆分为两个文件,同时在处理过程中更改输出文件,bash,shell,unix,Bash,Shell,Unix,我试图将一个文本文件拆分为两个不同的文件,该文件如下所示: //ABC12//burrito (line of text) (line of text) (line of text) etc //ABC12//taco (line of text) (line of text) (line of text) etc //ABC12//taco (line of text) (line of text) (line of text) etc //ABC12//burrito (line of te
//ABC12//burrito (line of text)
(line of text)
(line of text)
etc
//ABC12//taco (line of text)
(line of text)
(line of text)
etc
//ABC12//taco (line of text)
(line of text)
(line of text)
etc
//ABC12//burrito (line of text)
(line of text)
(line of text)
etc
所以我想把所有以玉米煎饼开头的行和所有后续行拆分成一个名为玉米煎饼的文件,直到读到一行有玉米卷的内容,我认为最好的方法是:
for each line in $text;
if line contains burrito
outputfile=burrito
line>>$outputfile
elseif line contains taco
outputfile=taco
line>>$outputfile
else
line>>$outputfile
但我不确定,任何帮助都将被感激 这可以通过
awk
完成:
awk '/burrito/ {f="burrito"} /taco/ {f="taco"} {print > f}' file
解释
这会将行输出到一个文件f
,当发现taco
或burrito
时,该文件的名称会更改:
这意味着:如果行包含/burrito/{f=“burrito”}
,则将变量burrito
设置为f
burrito
与/taco/{f=“taco”}
相同taco
- {print>f}
f将行打印到存储在
{print>f.txt“}`或其他什么中的文件中。你也可以说
burrito
或taco
之前将其输出到其他地方,您可以说:
awk 'BEGIN {f="another_file"} /burrito/ {f="burrito"} /taco/ {f="taco"} {print > f}' file
这可以通过
awk
完成:
awk '/burrito/ {f="burrito"} /taco/ {f="taco"} {print > f}' file
解释
这会将行输出到一个文件f
,当发现taco
或burrito
时,该文件的名称会更改:
这意味着:如果行包含/burrito/{f=“burrito”}
,则将变量burrito
设置为f
burrito
与/taco/{f=“taco”}
相同taco
- {print>f}
f将行打印到存储在
{print>f.txt“}`或其他什么中的文件中。你也可以说
burrito
或taco
之前将其输出到其他地方,您可以说:
awk 'BEGIN {f="another_file"} /burrito/ {f="burrito"} /taco/ {f="taco"} {print > f}' file
您可以使用此
awk
命令:
wk 'BEGIN{split("burrito taco", a); f=a[1]} {
for (i=1; i<=length(a); i++) if ($0 ~ a[i]) f=a[i]; print $0 > f}' file
wk'开始{split(“玉米煎饼”,a);f=a[1]}{
对于(i=1;i f}'文件
- 这会将包含
的所有行重定向到名为taco
taco
- 这将把包含
的所有行重定向到名为burrito
burrito
- 您可以将输出文件名初始化为其他名称,而不是
f=a[1]
awk
命令:
wk 'BEGIN{split("burrito taco", a); f=a[1]} {
for (i=1; i<=length(a); i++) if ($0 ~ a[i]) f=a[i]; print $0 > f}' file
wk'开始{split(“玉米煎饼”,a);f=a[1]}{
对于(i=1;i f}'文件
- 这会将包含
的所有行重定向到名为taco
taco
- 这将把包含
的所有行重定向到名为burrito
burrito
- 您可以将输出文件名初始化为其他名称,而不是
f=a[1]