我有許多帶有製表符分隔的.csv文件,現在我想更改分隔符。 當我使用下面的腳本它不會更改文件。所以請用腳本幫助我。在unix中更改csv文件分隔符
file_mask=$1
from_delim=$2
to_delim=$3
for i in `ls $file_mask*`
do
sed -i 's|$from_delim|$to_delim|g' $i
done
我有許多帶有製表符分隔的.csv文件,現在我想更改分隔符。 當我使用下面的腳本它不會更改文件。所以請用腳本幫助我。在unix中更改csv文件分隔符
file_mask=$1
from_delim=$2
to_delim=$3
for i in `ls $file_mask*`
do
sed -i 's|$from_delim|$to_delim|g' $i
done
您需要用雙引號sed的身體使外殼變量可以展開:
sed -i "s|$from_delim|$to_delim|g" $i
更好的希望既不是$ from_delim也不是$ to_del im包含一個管道。
此外,don't parse ls - 不需要for循環都:
sed -i "s|$from_delim|$to_delim|g" ${file_mask}*
驗證差異:
file_mask=$1
from_delim=$2
to_delim=$3
sed -i.bak "s|$from_delim|$to_delim|g" $file_mask*
for f in $file_mask*; do
diff -q $f $f.bak >/dev/null
if (($? != 1)); then
echo "no changes made to $f"
fi
done
您可以使用tr
:
tr '\t' ',' <inputfile> outfile
(假設,
是新的分隔符)
不要使用此sed
或tr
,使用csvtool
(可從公共存儲庫獲得)。如果你的字符串中有TAB,上面的簡單工具就會窒息。您將需要使用awk
開始計算報價等。這將是一個混亂與這些基本工具。
要用例如TAB替代TAB,分號與csvtool包括所有角落的情況很簡單:
csvtool -t TAB -u ';' cat $ifile -o $ofile
隨着$ifile
輸入文件和$ofile
輸出文件。
你得到了什麼錯誤?請注意''from_delim'和'$ to_delim'在'sed'中不會被評估,除非你使用雙引號''' – fedorqui
我用雙引號以及我沒有得到任何錯誤。 – Dileep