次のCSVがあります。
Column1,Column2,Column3
A Existing text in Column1, A Date in Column2, A Integer in Column3
B Existing text in Column1, B Date in Column2, B Integer in Column3
C Existing text in Column1, C Date in Column2, C Integer in Column3
ファイルを繰り返すときは、forループを使用して各行を変数として保存しようとしています。
for i in `cat file.csv`
do
VARIABLE=$(echo $i && echo ", Another text")
done
変数を次のように保存する代わりに(たとえば、最初の反復でVARIABLE):
A Existing text in Column1, A Date in Column2, A Integer in Column3, Another text
次のように保存されます。
Column1,Column2,Column3
, Another Text
A
, Another Text
Existing
, Another Text
text
, Another Text
in
, Another Text
Column1,
, Another Text
A
, Another Text
Date
, Another Text
in
, Another Text
Column2,
, Another Text
A
, Another Text
Integer
, Another Text
in
, Another Text
Column3
, Another Text
B
, Another Text
Existing
, Another Text
text
, Another Text
...(continues)
for
ライン全体を全体的に見るよりも、各タスクを循環する特別な理由はありますか?
ベストアンサー1
問題は設定です$IFS
。
echo -n "$IFS" | od -t c -t x1
0000000 \t \n
20 09 0a
の出力は、cat
すべてのスペース、タブ、または改行文字で分割されます。改行文字でのみ分割したいです。だからこれはうまくいきます:
IFS='
'
for i in `cat file.csv`
do
VARIABLE=$(echo $i && echo ", Another text")
done
しかし、これは良いアプローチではありません。行を読む必要があります。また、コマンドの置換やecho
変数の組み合わせも使用しないでください。
while IFS= read -r line; do
VARIABLE="${line}, Another text"
done <file.csv