2016-08-25 8 views
0

私はbashスクリプトで1行ずつテキストファイルを読みます。私が読んでいるテキストファイルはタブで区切られたcsvです - しかし、私が読んだ行をカットしようとすると、それはうまくいかず、\ tがどこかの空白に変換されたようです。 t bashスクリプトでタブが失われる

以下のコードはありません私は最終的に何をやっているのですか?データを確実に読み取れるまで、コードに実際の作業負荷を実装していません。

for ((currlineno=2 ; $currlineno <= $maxlines ; currlineno++)); do 
currline=$(sed -n "$currlineno"p "$IMPORT_TABLE".csv) 
echo $currline |cut -f2 
done 

今、私はそれが

for ((currlineno=2 ; $currlineno <= $maxlines ; currlineno++)); do 
currline=$(sed -n "$currlineno"p "$IMPORT_TABLE".csv |tr '\t' ';') 
echo $currline |cut -f2 -d ';' 
done 

に動作しますが、私のテキストファイルも含まれているとして、私はそのようにそれを行うことはできません下のような2行を変更したときに「;」 '、'、 '。'分野で。私のフィールドは決してそれを含んでいないので、タブは私にとって唯一の受け入れ可能なオプションです。

+1

引用符: 'echo" $ currline "| cut -f2' – anubhava

+0

またはcurrlineをスキップして使用してください。 'sed -n" $ currlineno "p" $ IMPORT_TABLE ".csv |カット-f2' – anubhava

+0

ありがとうございます。実際には、各フィールドをカットして抽出する必要があり、30フィールドごとにファイルを読み取らないようにしたいと考えています。変数を引用すると私の仕事ができました。 THANKS –

答えて

1

これは、変数を二重引用符で囲まないためです。

tabbed=$'a\tb' 
echo $tabbed : "$tabbed" 

bashは引用符の変数外を見たとき、それはその内容に単語の分割を適用し、echoはちょうどスペースで区切っそのパラメータを出力します。二重引用符は、空白、改行などが含まれていても、値を1つのパラメータにします。

関連する問題