在修改文本之前将某些文本行连接在一起

在修改文本之前将某些文本行连接在一起

我有一个板球评论,比如 -

0.3
Richardson to RG Sharma, 2 runs, gentle, non-swinging length ball on off, Rohit seeks to pick it up. Hit high on the bat and spooned over the returning Mitch Marsh at midwicket
0.4
Richardson to RG Sharma, 1 run, banged in short, controlled pull to long leg

我想要做的是将n.n行与以下行连接起来,用空格替换换行符。然后,我想删除每行从第二个逗号到末尾的所有内容,因此上面输入的输出应该是:

0.3 Richardson to RG Sharma, 2 runs
0.4 Richardson to RG Sharma, 1 run

-- 编辑 -- 我使用 [0-9]"\n"[AZ] 来匹配换行符,但我无法重现匹配的确切数字和字符。另外,为了删除 2 个逗号后的所有内容,我尝试了参数扩展,但只能让它在单个逗号后删除。

答案1

您可以使用sed

sed -ne '/^[0-9][0-9]*\.[0-6]/ { N; s/\n/ /; s/^\([^,]*,[^,]*\),.*$/\1/; p; }' < data

这会处理一个名为 的文件data,除非要求(-n) 并执行引号中的 sed 程序。

该程序选择以一个或多个数字、 a.和数字 0-6 开头的行,然后运行这些行的部件{}。这N命令也读取下一行,中间有一个换行符。第一个s///用空格替换换行符。

第二个匹配新的单行直到第二个逗号,并用第一部分替换整行。它捕获一\(\)包含一些非逗号字符字符串、一个逗号和一些其他非逗号字符字符串的组,所有字符串后面都跟有一个逗号和.*行尾的任何文本$

决赛p印刷输出结果行。所有其他输入行都将被忽略。

答案2

AWK 中的替代解决方案:

awk -v FS="," '/^[0-9]/{line=$0;getline; line=line" "$1", "$2 ;print line}' file

相关内容