我有一个文本文件,格式如下。在几条随机线之后有一个分隔符(*****
),如下所示
aa
bb
cc
*****
dd
ee
*****
ff
ggg
hh
ii
*****
我期待如下ouput
aa,bb,cc
dd,ee
ff,ggg,hh,ii
我认为awk和sed可以帮助我。但无法想象 它确切地说。 如何将这些行合并为一个?
谢谢。
答案 0 :(得分:1)
这个awk单行应该适用于您的输入:
awk -v RS='[*]+' -v OFS="," '$1=$1' file
使用您的数据进行测试:
kent$ cat f
aa
bb
cc
*****
dd
ee
*****
ff
ggg
hh
ii
*****
kent$ awk -v RS='[*]+' -v OFS="," '$1=$1' f
aa,bb,cc
dd,ee
ff,ggg,hh,ii
答案 1 :(得分:1)
$('a',sidebar).click(function(e){
e.stopPropagation();
});
支持`\ n',则可以使用替代好awk
解决方案
sed
答案 2 :(得分:0)
这样的事情怎么样:
cat in.txt | tr ' ' ',' | tr '\n' ' ' | sed 's/\*\*\*\*\*/\n/' | sed 's/^ //'
将导致:
aa,bb,cc dd,ee ff,ggg,hh,ii
ff,ggg,hh,ii dd,ee aa,bb,cc
输入行:
aa bb cc
dd ee
ff ggg hh ii
*****
ff ggg hh ii
dd ee
aa bb cc
答案 3 :(得分:0)
这可能适合你(GNU sed):
sed -r ':a;N;/\n\*+$/!s/\n/,/;ta;P;d' file
将另一行添加到当前行,然后用逗号替换其换行符,直到遇到仅包含*
的行。然后打印第一行并删除模式空间。
答案 4 :(得分:0)
sed in action
sed -nr '/^[*]+ */!{H};/^[*]+ */{s/.*//g;x;s/\n/,/g;s/^,//g;p}' my_file
输出
aa,bb,cc
dd,ee
ff,ggg,hh,ii