在Linux中打印CSV文件中的列

时间:2013-04-11 10:04:18

标签: linux bash csv

我有一个非常愚蠢的问题,我认为我可以轻松地回答自己...好吧我不能。

我的文件";"分隔如下:

Grand Hotel  ;Yes;No availability;Dus ;11; . 130,00 ;No availability;500 mt from Arena;

我必须将其打印在一个文件中(将其移动到Excel中),如下所示:

Grand Hotel
Yes
No Availability
...etc etc

这么简单,我找不到一个非常简单的解决方案。 由于我正在使用Debian Bash shell环境,我正在尝试任何东西(bash脚本,awk,grep)......没有任何作用。 请帮忙。 微米。

3 个答案:

答案 0 :(得分:3)

所以基本上你想要用F1;F2;F3;...;FN形式的行转换成文件:

 F1
 F2
 F3
 ...
 FN

我们可以使用tr(1)将分号转换为换行符:

tr ';' '\n' < infile

其中“infile”是CSV输入文件的名称。

答案 1 :(得分:1)

sed

怎么样?
echo '....' | sed 's/;/\n/g'

答案 2 :(得分:1)

假设您的文件长于一行,当所有字段位于不同的行中时,新的记录分隔符是什么?

这段awk会在新行上写下每个字段,并在每个记录之间添加一个空行。

awk 'BEGIN {FS=";"; OFS="\n"; ORS="\n\n"} {$1=$1} 1'

需要奇数$1=$1位来强制awk用新分隔符重写$ 0(即当前记录)。

示例:

$ awk 'BEGIN {FS=";"; OFS="\n"; ORS="\n\n"} {$1=$1} 1' << END
a;b;c
d;e;f
END

输出

a
b
c

d
e
f