我是awk的新手,想过尝试基于模式分割文件的简单练习。请注意:
string file1
一号线
2号线
3号线
string file2
一号线
2号线
3号线
string file3
一号线
2号线
line3中
“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脚本吗?
感谢。
答案 0 :(得分: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} }
但是,如果有人发现更好的方法,请发布!
答案 1 :(得分:0)
我能想到的最好的(类似于你的回答)如下:
awk -v RS='\r\n' '{if(/string/){of=$2".txt";getline}else printf RS>of}{printf $0>of}'