将行映射到* nix中的列

时间:2015-02-19 16:53:31

标签: linux text command-line text-processing

我有一个文本文件是在有人从Excel粘贴到纯文本电子邮件中时创建的。最初有五个专栏。

Column header 1

Column header 2

...

Column header 5

Row 1, column 1

Row 1, column 2

etc

有些数据是单字,有些则是空格。使用unix utils将这些数据转换为列格式文本的最佳方法是什么?

编辑:我正在寻找以下输出:

Column header 1   Column header 2   ...   Column header 5
Row 1 column 1    Row 1 column 2 ...
...

我能够通过在每行的末尾添加一个逗号手动将数据转换为vim中的CSV来实现此输出,然后用J手动连接每组5行。然后我通过{{1运行csv获得所需的输出。但下次出现时,必须有更好的方法。

2 个答案:

答案 0 :(得分:1)

也许是一个人,一个人,最好的"方式,但它应该工作:

perl -ne 'BEGIN{$fields_per_line=5; $field_seperator="\t"; \
  $line_break="\n"}                                        \
  chomp;                                                   \
  print $_,                                                \
  $. % $fields_per_row ? $field_seperator : $line_break;   \
  END{print $line_break}'  INFILE > OUTFILE.CSV

只需替换" 5"," \ t" (tabspace)," \ n" (换行符)。

答案 1 :(得分:0)

您必须使用使用readline和counter的脚本。当程序到达你想要的那一行时,使用cut命令和空格作为稀释计来获得你想要的单词

counter=0
lineNumber=3
while read line
do
 counter += 1
 if lineNumber==counter
   do
      echo $line | cut -d" " -f 4
   done
 fi