2008-11-26 6 views
18

Angenommen, ich habe eine Textdatei mit Daten durch Leerzeichen getrennt in Spalten. Ich möchte ein Shell-Skript schreiben, das als Eingabe einen Dateinamen und eine Zahl N verwendet und nur diese Spalte ausgibt. Mit awk kann ich Folgendes tun:Wie drucke ich die Nte Spalte einer Textdatei mit AWK mit Argv

awk < /tmp/in '{print $2}' > /tmp/out 

Dieser Code druckt die zweite Spalte aus.

Aber wie würde man das in einem Shell-Skript umhüllen, so dass eine beliebige Spalte in argv übergeben werden könnte?

+3

Es stellt sich heraus, dass dieses Problem gut durch Schnitt gelöst wird. Weitere Informationen finden Sie unter "man cut". – speciousfool

Antwort

27
awk -v x=2 '{print $x}'

oder in einem Shell-Skript:

 
#!/bin/sh 
num=$1 
awk < /tmp/in -v x=$num '{print $x}' > /tmp/out 
+0

Danke für die Bearbeitung Jonathan ... – Ray

5
awk '{print $'$myvar'}' </tmp/in> /tmp/out 

Wo $ myvar Ihre variable Spalte ist (eine ganze Zahl). Achten Sie auf Skript-Injektionen!

+0

Oder: awk "{print \ $$ myvar}" ... der Vorteil ist weniger Anführungszeichen. –

Verwandte Themen