首页 文章

能够根据模式拆分文件,但无法从最后一行删除换行符

提问于
浏览
3

我是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 回答

  • 0

    感谢大家的所有投入 . 我能够通过使用下面的代码解决问题 .

    BEGIN {RS="\r\n"; FS=" "; ORS=""}  
    /string/ { fname=$2; ctr=1; next } { if (ctr==1) {print $0>fname".txt";ctr=0} else {print "\r\n" $0>fname".txt";next} }
    

    但是,如果有人发现更好的方法,请发布!

  • 0

    我能想出的最好的(类似于你的答案)如下:

    awk -v RS='\r\n' '{if(/string/){of=$2".txt";getline}else printf RS>of}{printf $0>of}'
    

相关问题