Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash脚本将文件拆分为两个文件,同时在处理过程中更改输出文件_Bash_Shell_Unix - Fatal编程技术网

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]

fedorqui,谢谢你清理我的帖子fedorqui,谢谢你清理我的帖子是的,在再次阅读问题后,我认为我误解了要求。是的,在再次阅读问题后,我认为我误解了要求。