2013-04-11 143 views
1

我有一個非常愚蠢的問題,我認爲我可以輕鬆回答自己...以及我不能。在Linux中打印一個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)......沒有任何效果。 請幫助。 M.

+0

$貓FILENAME |而讀線;做echo $ line | tr';' '\ n';回聲; done> filename.xls.txt – 2013-04-11 18:09:07

回答

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

這就是我正在尋找伴侶!太多了 – 2013-04-12 08:17:58

3

所以基本上你要轉換文件與表格F1;F2;F3;...;FN行到:

F1 
F2 
F3 
... 
FN 

我們可以使用TR(1)到換行符翻譯的分號:

tr ';' '\n' < infile 

其中「infile」是CSV輸入文件的名稱。

+2

也值得一提,粘貼可以用來做相反的事情:'paste -d';' -s' – Cera 2013-04-11 11:51:12

1

如何sed

echo '....' | sed 's/;/\n/g' 
+0

fuuu ... nnnny,我錯過了sed(還有很多其他的東西)。 – 2013-04-11 10:13:45

+0

@MorganForever查看Martin的答案,'tr(1)'也應該可以。 – cnicutar 2013-04-11 10:14:32