我的输入文件是:
zoo1
----
cat
dog
mouse
zoo2
----
lion
tiger
zebra
我希望我的输出文件是:
cat,dog,mouse
lion,tiger,zebra
知道怎么做?
答案 0 :(得分:2)
对于你问题中的例子,这个单行有效:
awk -v RS= '/----/{next}{gsub(/\n/,",")}7' file
或设置OFS and FS
:
awk -v RS= -v OFS="," -F'\n' '/----/{next}$1=$1' file
小测试:
kent$ awk -v RS= '/----/{next}{gsub(/\n/,",")}7' f
cat,dog,mouse
lion,tiger,zebra
kent$ awk -v RS= -v OFS="," -F'\n' '/----/{next}$1=$1' f
cat,dog,mouse
lion,tiger,zebra
答案 1 :(得分:2)
awk
的一种方式:
$ awk '!(NR%2){$1=$1;print}' FS='\n' OFS=',' RS= file
cat,dog,mouse
lion,tiger,zebra
答案 2 :(得分:0)
您可以使用perl的段落模式执行此操作:
$ perl -000 -ne 'next if /---/;print join(",",split(/\n/)),"\n"' file
cat,dog,mouse
lion,tiger,zebra
来自man perlrun
:
-0[octal/hexadecimal]
specifies the input record separator ($/) as an octal or hexadecimal number.
If there are no digits, the null character is the separator. Other switches
may precede or follow the digits. For example, if you have a version of
find which can print filenames terminated by the null character, you can say
this:
find . -name '*.orig' -print0 | perl -n0e unlink
The special value 00 will cause Perl to slurp files in paragraph mode.
Any value 0400 or above will cause Perl to slurp files whole, but by
convention the value 0777 is the one normally used for this purpose.
答案 3 :(得分:0)