2014-09-22 70 views
1

我需要在多个文件中转换以下内容。文本不必是相同的,但将在相同的格式和长度将行转换为shell中的列

文件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 

TO

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

回答

2

用途:

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.... 
+0

辉煌。工作得很好。非常非常Simple.Wish我可以投票,但我没有代表。 – user1659329 2014-09-22 10:40:08

+0

@ user1659329 GTH :) – jm666 2014-09-22 10:49:14

1

您需要在tr之后插入echo。使用这样的脚本:

for f in file1 file2; do 
    tr '\n' ',' < "$f"; echo 
done > files.output 
0
perl -ne 'chomp; print $_ . (($. % 8) ? "," : "\n")' f* 

其中:

  • -n由线读取文件线,但不打印每行
  • -e执行命令行
  • 代码
  • 8每个文件中的行数
  • f* glob文件(替换为将选择所有文件的 )。如果你需要一个特定的订单,你可能需要 这里更复杂的东西。