2017-08-02 3 views
1

私がbashで書いたスクリプトに問題があります。私はwhileループで行ごとに.txtファイルを読み込んでいます。行はx:y:z:a:b:cの形式です。各要素( 'x'、 'a'など)は、年齢、高さ、名前などの何かに対応します。私はうまくいきたいフィールドを印刷することに成功しましたが、「x:y:z:a:b:c」「x:y:z」全体を1つのセルの.csvに印刷すると、 「a:b:c」は、姓と名にカンマがあるため、次のセルに移動します。私は1つのセル内のすべての情報が欲しいデータにカンマが含まれている場合にbashでCSVファイルを生成する

Cell 1       Cell 2 
age:height:number:last name  first name:language 

:私は、これは必要に応じて、私はさらに明確にすることができますので、混乱に聞こえるが、ここでそれがどのように見えるかを知っています。問題は、最後と最初の間にコンマがあることによると思います。ヒントや指針があれば教えてください。

編集:ここでは、コードが見えるものであるように:

INPUT=Smith, John:126 lbs:67in:26:College University 

str = "Smith, John:126 lbs:67in:26:College University" ので、 `NAME =スミスのサンプル入力を取る:filedirectory.filename.txtには次のものが含ま

while read INPUT do 
    str=$INPUT 
    IFS=: read -r -a ARR <<< "$str" 
    NAME=${ARR[0]} 
    AGE=${ARR[3]} 
    echo $AGE, $NAME >>Filedirectory.filename.csv 
done<filedirectory.filename.txt 

... 、John、AGE = 26.理想的には、出力は隣り合わせに2つのセルが配置されている必要があります。

26 - Smith, John 

は、代わりに私はCSVファイルを開くExcelで出力がされて終わる:「 - 」は、それぞれ

12 - Smith - John 

列(12 1つのセルであり、次の最後の名前など)を象徴する何私は姓と名が1つのセルにあることを望んでいますが、名前が「Smith、John」とフォーマットされていて、カンマがものすごく混乱しているという事実のために、これは起こっていないようです。

+1

変更区切り文字とその文字に設定区切り文字でスプレッドシートを開きますか? –

+2

コードを投稿しますか? – Riaz

+0

残念ながら私のコードを投稿することはできません –

答えて

1

次のようになります。

while IFS=: read -r name _ age _; do 
    printf '"%s","%s"\n' "${name//\"/\"\"}" "${age//\"/\"\"}" 
done <in.txt >out.csv 

Less correctly(注意点を説明リンク仕様のアプリケーション使用法や理論的根拠のセクションを参照してください)、あなたはechoでこれを行うことができます:どちらの場合も

while IFS=: read -r name _ age _; do 
    echo '"'"${name//\"/\"\"}"'","'"${age//\"/\"\"}"'"' 
done <in.txt >out.csv 

、我々は引用符でセルの内容を囲んだ、とparameter expansionを使用して文字列内にある引用符をダブルアップすると、それらの引用符がCSV構文でリテラルになります。

0

Excel機能を使用することができます。
最初の行がSEP=:の場合、これをSEPとして使用してcsvファイルが読み込まれます。
は、今では簡単です:

sed -r ' s/([^:]*):([^:]*):([^:]*):([^:]*):.*/\4:\1/; 
     1s/.*/SEP=:\n&/' <filedirectory.filename.txt> outputfile; 
関連する問題