我需要在多个文件中转换以下内容。文本不必相同,但格式和长度相同
文件1:
XXXxx81511
XXX is Present
abcdefg
07/09/2014
YES
1
XXX
XXX-XXXX
文件2:
XXXxx81511
XXX is Present
abcdefg
07/09/2014
YES
1
XXX
XXX-XXXX
要
XXXxx81511,XXX is Present,abcdefg,07/09/2014,YES,1,XXXXXX-XXXX
XXXxx81511,XXX is Present,abcdefg,07/09/2014,YES,1,XXXXXX-XXXX
基本上将行转换为列并附加到新文件,同时添加逗号以分隔它们。
我正在尝试cat filename | tr' \ n' ','但结果确实在同一行中添加。像这样
XXXxx81511,XXX现在,abcdefg,07/09/2014,YES,1,XXXXXX-XXXX,XXXxx81511,XXX现在,abcdefg,07/09/2014,YES,1,XXXXXX-XXXX
答案 0 :(得分:4)
使用:
paste -sd, file1 file2 .... fileN
#e.g.
paste -sd, *.txt file*
打印
XXXxx81511,XXX is Present,abcdefg,07/09/2014,YES,1,XXX,XXX-XXXX
XXXxx81511,XXX is Present,abcdefg,07/09/2014,YES,1,XXX,XXX-XXXX
如果你需要每一个之后的空行
paste -sd, file* | sed G
打印
XXXxx81511,XXX is Present,abcdefg,07/09/2014,YES,1,XXX,XXX-XXXX
XXXxx81511,XXX is Present,abcdefg,07/09/2014,YES,1,XXX,XXX-XXXX
短perl变体:
perl -pe 'eof||s|$/|,|' files....
答案 1 :(得分:1)
您需要在echo
之后插入tr
。使用这样的脚本:
for f in file1 file2; do
tr '\n' ',' < "$f"; echo
done > files.output
答案 2 :(得分:0)
使用for
循环:
for f in file*; do sed ':a;N;$!ba;s/\n/,/g' < $f; done
sed
代码取自sed: How can I replace a newline (\n)?。 tr '\n' ','
对我的有限测试设置无效。
答案 3 :(得分:0)
perl -ne 'chomp; print $_ . (($. % 8) ? "," : "\n")' f*
其中:
-n
逐行读取文件但不打印每行-e
执行命令行中的代码8
每个文件中的行数f*
glob for files(替换为将选择全部的内容)
你的文件)。如果您需要特定订单,您可能需要
这里更复杂的东西。