我非常新手awk,想尝试一个简单的练习,根据模式拆分文件。请注意:
- 我的文件是记事本文件.txt(带有CRLF格式)。
- 文件恰好包含以下内容(输入文件开头没有空行)
字符串file1
line1
line2
line3
字符串file2
line1
line2
line3
字符串file3
line1
line2
line3
- 我想要实现什么(目前只想使用awk)?
一旦找到表达式“string”并排除它,就将文件拆分。因此,我的输出将是
"file1"只包含
line1
line2
line3
"file2"只包含
line1
line2
line3
依此类推... 下面是我的尝试...但是在每个文件的结尾和情况A和B的开始处留下了一个换行符。
情况A:
BEGIN {RS="\r\n";FS=" ";ORS="\r\n"}
/string/ { fname = $2; next } { print > fname".txt"}
CASE B:
案例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脚本吗?
谢谢。
GNU Awk 4.0.1
中重现“Case A”的预期结果。输出甚至保留了CRLF格式,没有额外的行。 - user000001vi
)。但是,在文件上运行od -c
命令后,我可以确认它们确实包含最后的\r\n
,如果您想避免这种情况,则您在答案中提供的解决方案似乎是正确的方法。 - mschilli