linux - 为模式之间的文本创建新文件

标签 linux shell awk

我的 txt 文件中有以下模式:

./folder1/folder2/myfile.java
//java source line1
//java source line2
./folder1/folder3/myfile1.java
//java source line1
//java source line2
//java source line3

我想将这个文件拆分成类似的(如果我发出 cat 命令,它应该有上面一个文件中的源代码):

cat ./folder1/folder2/myfile.java
//java source line1
//java source line2

cat ./folder1/folder3/myfile1.java
//java source line1
//java source line2
//java source line3

我可以使用以下方法提取内容和文件名:

awk '/java/{flag=1;fileName=$0;next}/java$/{flag=0}flag' source.txt

但无法将代码重定向到具有不同的非现有文件夹的文件。

最佳答案

您所需要的只是类似的东西(未经测试,但如果不能完全正常工作,将非常接近):

awk '
/^\/\// { print > file; next }
{ close(file); dir=file=$0; sub(/\/[^\/]+$/,"",dir); system("mkdir -p \"" dir "\"") }
' source.txt

关于linux - 为模式之间的文本创建新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28781770/

相关文章:

sql - 哪个 SQL 服务器在 Linux Box 上运行?

linux - 如何验证传递的参数、值以及参数之间的依赖关系?

linux - 如何在 Bash 中运行超时的进程?

awk - shell脚本中增加输入变量号

linux - 如果使用 AND 条件,awk -F 找不到字符串

c++ - 刷新排队的 GPIB 响应

linux - 从 ubuntu 访问网站非常慢,但在 windows 中运行速度更快

Bash - 基于以毫秒为单位的时间戳搜索

c++ - 为什么我收到错误 "configure: error: Cannot find glib: Is glib-config in path?"?

linux - 创建包含特定文本的文件压缩包