我是awk的新手,想过尝试基于模式分割文件的简单练习 . 请注意:
-
我的文件是记事本文件.txt(使用CRLF格式) .
-
文件具有以下内容(输入文件中没有空白行)
string file1
一号线
2号线
3号线
string file2
一号线
2号线
3号线
string file3
一号线
2号线
3号线
- 我想要实现的目标(此时只想使用awk)?
我找到表达式"string"后立即拆分文件并将其排除 . 所以,我的输出就像
"file1"仅包含
一号线
2号线
3号线
"file2"仅包含
一号线
2号线
3号线
等等......以下是我尝试过的...但它在每个文件的末尾和A和B的每个文件的开头分别留下了换行符 .
案例A:
BEGIN {RS="\r\n";FS=" ";ORS="\r\n"}
/string/ { fname = $2; next } { print > fname".txt"}
案例B:
BEGIN {RS="\r\n"; FS=" "; ORS=""}
/string/ { if (NR>2) print prev_line>fname".txt"; fname=$2; next} {print (prev_line="") ? $0 : "\r\n" $0 > fname".txt"; prev_line=$0}
有人可以提供一些更好的方法/暗示修改上面的awk脚本吗?
谢谢 .
2 回答
感谢大家的所有投入 . 我能够通过使用下面的代码解决问题 .
但是,如果有人发现更好的方法,请发布!
我能想出的最好的(类似于你的答案)如下: