首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bash脚本在处理过程中更改输出文件时将文件拆分为两个文件

Bash脚本在处理过程中更改输出文件时将文件拆分为两个文件
EN

Stack Overflow用户
提问于 2014-12-30 16:18:01
回答 2查看 131关注 0票数 0

我试图将一个文本文件分成两个不同的文件,文件如下所示:

代码语言:javascript
运行
复制
//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

所以我想把所有以玉米煎饼和所有的玉米煎饼开头的行分割成一个名为玉米煎饼的文件,直到里面有墨西哥玉米卷的一行被读出来,我想最好的方法是:

代码语言:javascript
运行
复制
for each line in $text;
   if line contains burrito
         outputfile=burrito
         line>>$outputfile
   elseif line contains taco
         outputfile=taco
         line>>$outputfile
   else
         line>>$outputfile

但我不确定,如果有什么帮助,我会很感激的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-30 16:21:18

这可以用awk来完成

代码语言:javascript
运行
复制
awk '/burrito/ {f="burrito"} /taco/ {f="taco"} {print > f}' file

解释

这会将行输出到文件f,当找到tacoburrito时,文件的名称会更改:

  • /burrito/ {f="burrito"} --这意味着:如果行包含burrito,那么将变量f设置为burrito
  • /taco/ {f="taco"}taco一样。
  • {print > f}prints the line into the file stored inf. You can also say{print >f“.txt”}}或其他东西。

如果希望设置默认文件名,以便在找到burritotaco之前将其输出到其他地方,则可以这样说:

代码语言:javascript
运行
复制
awk 'BEGIN {f="another_file"} /burrito/ {f="burrito"} /taco/ {f="taco"} {print > f}' file
票数 4
EN

Stack Overflow用户

发布于 2014-12-30 16:43:06

您可以使用以下awk命令:

代码语言:javascript
运行
复制
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
  • 这将将包含taco的所有行重定向到一个名为taco的输出文件。
  • 这将将包含burrito的所有行重定向到一个名为burrito的输出文件。
  • 您可以将输出文件名初始化为其他文件名,而不是f=a[1]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27708818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档