2016-01-14 134 views
0

我們收到了18,000個CSV文件,每個文件有2行文本。編輯csv文件

這兩行應該是一行,用逗號隔開。

FK1QG5QL
B8:9D:7D

應該出現

FK1QG5QL,B8:9D:7D

我試圖刪除從返回第一行並用逗號替換它。

+0

問題被編輯。抱歉。 – cducasse

回答

1

這個會工作嗎?如果你想改變,你可以使用下一個版本的每一個文件

for f in *.csv; do awk 'BEGIN {l=""} !/^ *$/ {if (l!="") {l=l","}; l=l$0} END {print l}' "$f"; done > combined 

for f in *.csv; do awk 'BEGIN {l=""} !/^ *$/ {if (l!="") {l=l","}; l=l$0} END {print l}' "$f"; done 

您可以在上面的命令的輸出重定向到一個文件中。它會創建另一個名爲* .copy的文件:

for f in *.csv; do awk 'BEGIN {l=""} !/^ *$/ {if (l!="") {l=l","}; l=l$0} END {print l}' "$f" > "$f".copy; done 
+0

不會只有這些文件名纔有用嗎? – cducasse

+0

如果我正確地理解了你的話:你有18000個CSV文件,每個文件中有兩行,並且你想將每個文件中的每一行組合成一行,用逗號分隔。那是對的嗎?我的答案中的命令獲取當前目錄中的文件列表,讀取它們並將每個文件中的所有行合併爲一行,並用逗號分隔。 – stee1rat

+1

什麼是創建單獨的輸出文件(不覆蓋原始文件?)當然,UUOC,'awk'...腳本'$ f'更有效。祝你們好運。 – shellter

0

你是否有命令paste

for f in *; do 
    mv "$f" "$f.bak" && paste -sd "," "$f.bak" > "$f" 
done 
# test first before uncommenting next line 
# rm *.bak 

沒有貼,你可以嘗試其他的解決方案:

head -1 input.csv | tr '\n' ',' ; tail -1 input.csv 

cat input.csv | tr "\\n" "," | sed 's/,$/\n/' 

printf -v oneline "%s," $(cat input.csv); echo "${oneline%,}" 

sed 'N;s/\n/,/' input.csv 

set -- $(cat input.csv); IFS=,; echo "$*"