awk-Verwendung: awk ' Muster {Aktion} '
Bedeutung des Variablennamens
ARGC-Anzahl der Befehlszeilenargumente
ARGV-Befehlszeilenargumentarray
FILENAME aktueller Eingabedateiname
FNR Die Datensatznummer in der aktuellen Datei
FS Geben Sie das Feldtrennzeichen ein, der Standardwert ist ein Leerzeichen
RS Geben Sie das Datensatztrennzeichen ein
NF Die Anzahl der Felder im aktuellen Datensatz
NR Die Anzahl der Datensätze Bisher
OFS-Ausgabedomänentrennzeichen
ORS-Ausgabedatensatztrennzeichen
1. awk '/101/' Datei zeigt die übereinstimmenden Zeilen an, die 101 in der Datei enthalten.
awk '/101/,/105/' Datei
awk '$1 == 5' Datei
awk '$1 == "CT"' Datei Beachten Sie, dass doppelte Anführungszeichen erforderlich sind
aw k ' $1 * $2 >100 ' Datei
awk '$2 >5 && $2<=15' Datei
2. ' Datei Zeigt die aktuelle Datensatznummer, die Anzahl der Felder sowie das erste und letzte Feld jeder Zeile der Datei an.
awk '/101/ {print $1,$2 + 10}' file zeigt das erste und zweite Feld der passenden Zeile der Datei file plus 10 an.
awk '/101/ {print $1$2}' file
awk '/101/ {print $1 $2}' file zeigt das erste und zweite Feld der entsprechenden Dateizeile an, aber es gibt kein mittleres Feld im Anzeigezeittrennzeichen.
3. awk '$4>1000000 ' Holen Sie sich Eingaben über das Pipe-Zeichen, z. B.: Zeigen Sie die Zeilen im 4. Feld an, die die Bedingungen erfüllen.
4. awk -F „|“ ‚{print $1}‘ Datei arbeitet gemäß dem neuen Trennzeichen „|“.
awk 'BEGIN { FS="[: t|]" }
{print $1,$2,$3}' Datei Ändern Sie das Eingabetrennzeichen, indem Sie das Eingabetrennzeichen festlegen (FS="[: t|]") .
Sep="|"
awk -F $Sep '{print $1}' Datei verwendet den Wert der Umgebungsvariablen Sep als Trennzeichen.
awk -F '[ :t|]' '{print $1}' Datei verwendet den Wert des regulären Ausdrucks als Trennzeichen, der hier gleichzeitig Leerzeichen, :, TAB und | als Trennzeichen darstellt.
awk -F '[][]' '{print $1}' Datei wird als Trennzeichen entsprechend dem Wert des regulären Ausdrucks verwendet, der hier [, ] darstellt
5, awk -f Die Datei awkfile wird sequentiell durch den Inhalt der Datei awkfile gesteuert.
cat awkfile
/101/{print "
8. awk 'BEGIN { max=100 ;print "max=" max} BEGIN stellt die Operation dar, die vor der Verarbeitung einer Zeile ausgeführt wird.
{max=($1 >max ?$1:max); print $1,"Now max is "max}' file Holen Sie sich den Maximalwert des ersten Felds der Datei.
(Ausdruck 1? Ausdruck 2: Ausdruck 3 ist äquivalent zu:
if (Ausdruck 1)
Ausdruck 2
else
Ausdruck 3
awk '{print ($1>4 ? "high"$1: "low"$1)}' Datei
9. awk '$1 * $2 >100 {print $1}' Datei zeigt das erste in der Datei an. Die Felder stimmen mit 101 überein Zeilen (Datensätze).
10. awk '{$1 == 'Chi' {$3 = 'China' print}' Datei Nachdem Sie die passende Zeile gefunden haben, drucken Sie zunächst die Zeile aus (record) nach dem Ersetzen dividiert das 7. Feld durch 3, weist den Rest dem 7. Feld zu und gibt es aus >
11 =$2+$3; printf wage}'-Datei. Weisen Sie der Variablen „lohn“ einen Wert zu und drucken Sie die Variable
12 > END {print „tom was found „count“ times“}‘ file END bedeutet Verarbeitung, nachdem alle Eingabezeilen verarbeitet wurden
13 (/,/,""); cost+=$4;
END {print "The total is $" cost>"filename"}' Datei gsub-Funktion ersetzt $ durch eine leere Zeichenfolge und gibt das Ergebnis in DATEINAME aus. gsub(/,/,"");
else if ($4>2000&&$4<3000) c2+=$4; else if ($4>3000&&$4<4000) c3+=$4;
else c4+=$4 }
END {printf "c1=[%d];c3=[% d];c4=[%d]n",c1,c2,c3,c4}"' Datei
Vervollständigen Sie die bedingte Anweisung durch if und else if
awk '{gsub(/$/, " ");gsub(/,/,"");
if ($4>3000&&$4<4000) exit
else c4+=$4 }
END {printf "c1=[% d ];c2=[%d];c3=[%d];c4=[%d]n",c1,c2,c3,c4}"' Datei
Beenden Sie unter einer bestimmten Bedingung durch Beenden, aber immer noch END-Operation ausführen.
awk '{gsub(/$/,"");gsub(/,/,"");
if ($4>3000)
else c4+=$4; } END {printf "c4=[%d]n",c4}"' Datei
Verwenden Sie next, um die Zeile unter einer bestimmten Bedingung zu überspringen und Operationen in der nächsten Zeile auszuführen.
14, awk '{print FILENAME,$0}' file1 file2 file3>fileall Alle Dateiinhalte von file1, file2 und file3 in fileall schreiben, das Format ist
. Druckt die Datei und stellt den Dateinamen voran. 15. awk ' $1! = previous { close( previous); previous=$1 }
{print substr($0,index($0," ") +1)>$1}' fileall Neupartitionierung der zusammengeführten Dateien. Aufteilen in 3 Dateien
16. awk 'BEGIN {"date"|getline d; print d}' Senden Sie das Datumsausführungsergebnis über die Pipeline an getline und drucken Sie es aus.
17. awk 'BEGIN {system("echo "Geben Sie Ihren Namen ein:\c"");print "nIhr Name ist",d,"b!n"}'
Bestanden Der Befehl getline gibt den Namen interaktiv ein und zeigt ihn an.
awk 'BEGIN {FS=":"; while(getline< "/etc/passwd" >0) { if($1~"050[0-9]_") print $1}}'
Drucken Sie die Benutzernamen aus, die 050x_ in der Datei /etc/passwd enthalten.
18. Die Datei awk '{ i=1;while(i
{ for(i=1;i
else { printf "%s/",$i } }}' Zeigt den vollständigen Pfad einer Datei an.
Verwenden Sie for und if, um das Datum anzuzeigen
awk 'BEGIN {
for(j=1;j<=12;j++)
{ flag=0;
printf "n%dmonthn ",j;
for(i=1;i<=31;i++)
{
if (j==2&&i>28) flag=1;
if ((j==4 ||j==6||j==9||j==11)&&i>30) flag=1
if (flag==0) {printf "%02d%02d ",j,i}
}
}
}'
19. Wenn es sich um doppelte Anführungszeichen handelt, bedeutet dies die Zeichenfolge
Flag=abcd
awk '{print '$Flag'}' Das Ergebnis ist abcd
awk '{print "$Flag"}' Das Ergebnis ist $Flag
Das Obige wird von Chinaunix übertragen , das Folgende ist meine eigene Zusammenfassung:
Summe:
$awk 'BEGIN{total=0}{total+=$4}END{print total}' a.txt ----- Der vierte Teil der a.txt-Datei. Summieren Sie die Felder!
$ awk '/^(no|so)/' test-----Druckt alle Zeilen, die mit mode no oder so beginnen.
$ awk '/^[ns]/{print $1}' test-----Wenn der Datensatz mit n oder s beginnt, drucken Sie diesen Datensatz aus.
$ awk '$1 ~/[0-9][0-9]$/(print $1}' test-----Diesen Datensatz drucken, wenn das erste Feld mit zwei Zahlen endet.
$ awk '$1 == 100 ||. $2 < 50' Test-----Wenn das erste Feld gleich 100 oder das zweite Feld kleiner als 50 ist, drucken Sie diese Zeile aus != 10' test-----Wenn das erste Feld nicht gleich 10 ist, drucken Sie diese Zeile
$ awk '/test/{print $1 + 10}' test- ----If Der Datensatz enthält den Test für reguläre Ausdrücke. Fügen Sie 10 zum ersten Feld hinzu und drucken Sie ihn aus.
$ awk '{print ($1 > 5? "ok "$1: "error"$1) }' test- ----Wenn das erste Feld größer als 5 ist, geben Sie den Ausdruckswert nach dem Fragezeichen aus, andernfalls drucken Sie den Ausdruckswert nach dem Doppelpunkt
$ awk '/^root/,/^mysql /. ' test----Drucken Sie die Datensätze, die mit dem regulären Ausdrucksstamm beginnen, auf alle Datensätze innerhalb des Datensatzbereichs, die mit dem regulären Ausdrucksstamm beginnen. Wenn ein neuer Datensatz gefunden wird, der mit dem regulären Ausdrucksstamm beginnt, fahren Sie mit dem Drucken bis zum nächsten fort der Datensatz, der mit dem regulären Ausdruck mysql beginnt, oder bis zum Ende der Datei
Weitere Artikel zu allgemeinen AWK-Befehlen finden Sie bitte Achten Sie auf PHP Chinesisch. Net