我有一个板球评论,比如 -
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