2009-08-26 6 views
0

abc.dat Datei enthalten ZeilenWie bekomme ich Anführungszeichen in der Ausgabe in Unix?

1 
2 
3 

Code

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

Beispielausgabe ist immer 1,2,3, , aber ich mag die Ausgabe als "1", "2", "3",

u kann mir helfen plz

+1

Ihre Lösung sollte "3,2,1," anstelle von "1,2,3," generieren. –

Antwort

3

Ihr Code hat eine Reihe von Problemen, die erste ist, was Sie beschreiben.

Es wird auch die Zahlen in umgekehrter Reihenfolge und haben ein abschließendes Komma, was wahrscheinlich nicht das ist, was Sie wollen.

Wenn das ist was Sie wollen, verwenden Sie einfach die zweite Lösung.

Lösung 1, richtige Reihenfolge und kein Komma:

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

Lösung 2, richtige Reihenfolge mit nachfolgendem Komma:

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

Lösung 3, viel einfacher, bedeuteten die Verwendung von Tool für den Job:

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

Lösung 3 wäre meine bevorzugte Option, da es schneller sein wird und in der Lage sein, Eingabezeilen mit Leerzeichen in ihnen zu behandeln.

+0

tatsächlich habe ich einen anderen Befehl verwendet, um den letzten Charakter zu trimmen, nachdem ich vorher eine Handelslinie bekommen habe. aber ur erste Lösung gibt mir alles ohne Komma in der letzten danke .............. – musicking123

3
die Zitate mit \ Flucht

:

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

danke sehr viel ......... bin neu zu unix .. – musicking123

1

Beachten Sie, dass die Verwendung von cat wie folgt bedeutet, dass Sie, wenn Sie mehrere Wörter in einer Zeile haben, jedes Wort einzeln angeben. Außerdem generiert Ihr Code "3,2,1" anstelle von "1,2,3". - mit Ausnahme der Verwendung von read zu erhalten jede Zeile

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

Das ist ganz ähnlich wie Pax-Lösung:

Um Anführungszeichen um jede Zeile zu erhalten, würden Sie den read Befehl verwenden müssen.

Verwandte Themen