2009-08-26 7 views
0

はラインUNIXの出力で引用符を取得する方法は?ファイルabc.dat

1 
2 
3 

コードが

tradeline="" 
for line in $(cat abc.dat) 
do 
tradeline="$line,$tradeline" 
done 

サンプル出力を取得していますされては、 1,2,3であるが含まれていますが、私は "1"、 "2" として出力したいです、 "3"、

uは

+1

解決策は '1,2,3'ではなく '3,2,1'を生成する必要があります。 –

答えて

3

あなたのコードには、多くの問題があります。

また、逆の順序で数字を入力し、末尾にカンマがあります。これはおそらくあなたが望むものではありません。

の場合は、2番目のソリューションを使用してください。

ソリューション1、正しい順序なし末尾のカンマ:

tradeline="" 
sep="" 
for line in $(cat abc.dat) ; do 
    tradeline="${tradeline}${sep}\"${line}\"" 
    sep="," 
done 
echo ${tradeline} 

ソリューション2、カンマを末尾と右の順:仕事のために意味のツールを使用して、はるかに簡単

tradeline="" 
for line in $(cat abc.dat) ; do 
    tradeline="${tradeline}\"${line}\"," 
done 
echo ${tradeline} 

解決策3:

awk 'BEGIN {sep=""} {printf "%s\"%s\"",sep,$0;sep=","} END {print}' abc.dat 

ソリューション3は、より高速になるため、私の優先オプションです。は、入力行に空白を入れて処理することができます。

+0

実際に私は前にtradelineを取得した後に最後の文字をトリミングするためにいくつかのコマンドを使用しました。 しかし、fr frの解決策は、最後にコンマなしで私にすべてを与えます ありがとうございました.............. – musicking123

3
\で引用符をエスケープ

plzは私を助けることができます。

tradeline="\"$line\",$tradeline" 
+0

ありがとうございました........私はUnixに新しいです – musicking123

1

catを使用すると、1行に複数の単語がある場合でも、各単語を別々に引用することになります。また、コードは '1,2,3'ではなく '3,2,1'を生成します。

各行の前後に引用符を取得するには、あなたがreadコマンドを使用する必要があります:

tradeline="" 
sep="" 
cat abc.dat | 
while read line 
do 
    tradeline="$tradeline$sep\"$line\"" 
    sep="," 
done 

これは、パックスのソリューションと非常によく似ている - それぞれの行を取得するためにreadの使用を除き。

関連する問題