2017-02-19 5 views
0

Ich habe eine Datei user_list.txt, die eine Tabelle von 4 Feldern hat, die durch "," getrennt sind. Zum BeispielWie ignoriert man Leerzeichen im awk-Befehl

Ich verwende den folgenden Befehl, um das dritte Spalte-Feld zu extrahieren.

output=$(awk 'BEGIN { FS = "," } ; { print $3 }' user_list.txt) 

Wenn ich versuche, den Inhalt der Ausgangsgröße zu überprüfen.,

echo ${output[0]} --> good 
echo ${output[1]} --> morning 

Ich möchte es als String echo ${output[0]} --> good morning, aber da Leerzeichen die Standardtrennzeichen ist, wird der String geteilt wird.

Bitte helfen.

+4

Mit bash und Gnu awk 'echo $ output' und' echo $ output [0] 'beide produzieren' guten Morgen'. Was versuchst du zu erreichen? –

+2

Scheint so, als wäre dies eine Bash-Frage, keine Awk-Frage, und Sie wollen 'echo $ {output}'. –

+0

Wenn ich ($ (awk 'BEGIN {FS = ","}; {print $ 3}' user_list.txt)) verwende um es zu speichern, dann bekomme ich., echo $ {output [0]} - > gut echo $ {Ausgabe [1]} -> Morgen. –

Antwort

1

In bash, der Befehl Linien der Eingabe in ein Array zu lesen ist mapfile

mapfile -t output < <(awk -F, '{print $3}' user_list.txt) 

for element in "${output[@]}" # <= the quotes are crucial here 
do 
    echo "have: $element" 
done 

Wenn Ihre Eingabedatei dann nur eine einzige Zeile ist cut

output=$(cut -f, -d3 user_list.txt) 
echo "have: $output" 
0

verwenden Dies kann erreicht mit dem folgenden Befehl. Berücksichtigt user_list.txt als Eingabedatei.

0

Wie üblich, wenn Sie einen kleinen Teil eines viel größeren Bildes zur Verfügung stellen, ist es schwierig, richtig zu antworten. Es scheint, dass Sie etwas in bash mit den Werten aus der dritten Spalte tun wollen, so was falsch ist mit einer einfachen Schleife:

while IFS=, read -r _ _ item _ 
do 
    <do stuff with $item here> 
done<user_list.txt 

Natürlich könnte ich falsch sein wie die Frage schlecht entwickelt und macht es schwer zu machen eine tatsächliche Antwort

Verwandte Themen