GNU/Linux >> Znalost Linux >  >> Linux

8 výkonných vestavěných proměnných Awk – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

Tento článek je součástí probíhající série příkladů výukových programů Awk. Awk má několik výkonných vestavěných proměnných. V Awk jsou dva typy vestavěných proměnných.

  1. Proměnná, která definuje hodnoty, které lze změnit, jako je oddělovač polí a oddělovač záznamů.
  2. Proměnná, kterou lze použít pro zpracování a sestavy, jako je počet záznamů, počet polí.

1. Awk FS Příklad:Proměnná oddělovače vstupních polí.

Awk čte a analyzuje každý řádek ze vstupu standardně na základě mezery a nastavuje proměnné $1,$2 atd. Proměnná Awk FS se používá k nastavení oddělovače polí pro každý záznam. Awk FS lze nastavit na libovolný jednotlivý znak nebo regulární výraz. Oddělovač vstupních polí můžete použít pomocí jedné z následujících dvou možností:

  1. Použití volby příkazového řádku -F.
  2. Awk FS lze nastavit jako normální proměnnou.
Syntax:

$ awk -F 'FS' 'commands' inputfilename

(or)

$ awk 'BEGIN{FS="FS";}'
  • Awk FS je libovolný jednotlivý znak nebo regulární výraz, který chcete použít jako oddělovač vstupních polí.
  • Awk FS lze změnit libovolněkrát, zachovává si své hodnoty, dokud není explicitně změněn. Pokud chcete změnit oddělovač pole, je lepší jej změnit před přečtením řádku. Takže tato změna ovlivní řádek, který čtete.

Zde je příklad awk FS pro čtení souboru /etc/passwd, který má jako oddělovač pole „:“.

$ cat etc_passwd.awk
BEGIN{
FS=":";
print "Name\tUserID\tGroupID\tHomeDirectory";
}
{
	print $1"\t"$3"\t"$4"\t"$6;
}
END {
	print NR,"Records Processed";
}
$awk -f etc_passwd.awk /etc/passwd
Name    UserID  GroupID        HomeDirectory
gnats	41	41	/var/lib/gnats
libuuid	100	101	/var/lib/libuuid
syslog	101	102	/home/syslog
hplip	103	7	/var/run/hplip
avahi	105	111	/var/run/avahi-daemon
saned	110	116	/home/saned
pulse	111	117	/var/run/pulse
gdm	112	119	/var/lib/gdm
8 Records Processed

2. Awk OFS Příklad:Výstupní proměnná oddělovače pole

Awk OFS je výstupní ekvivalent proměnné awk FS. Ve výchozím nastavení je awk OFS jedna mezera. Následuje příklad awk OFS.

$ awk -F':' '{print $3,$4;}' /etc/passwd
41 41
100 101
101 102
103 7
105 111
110 116
111 117
112 119

Concatenator v tiskovém příkazu „,“ zřetězí dva parametry s mezerou, která je ve výchozím nastavení hodnotou awk OFS. Hodnota Awk OFS bude tedy vložena mezi pole ve výstupu, jak je uvedeno níže.

$ awk -F':' 'BEGIN{OFS="=";} {print $3,$4;}' /etc/passwd
41=41
100=101
101=102
103=7
105=111
110=116
111=117
112=119

3. Awk RS Příklad:Record Separator variable

Awk RS definuje čáru. Awk standardně čte řádek po řádku.

Vezměme si, že známky studentů jsou uloženy v souboru, každý záznam je oddělen dvojitým novým řádkem a každá pole jsou oddělena znakem nového řádku.

$cat student.txt
Jones
2143
78
84
77

Gondrol
2321
56
58
45

RinRao
2122
38
37
65

Edwin
2537
78
67
45

Dayan
2415
30
47
20

Nyní níže uvedený skript Awk vytiskne jméno studenta a Rollno z výše uvedeného vstupního souboru.

$cat student.awk
BEGIN {
	RS="\n\n";
	FS="\n";

}
{
	print $1,$2;
}

$ awk -f student.awk  student.txt
Jones 2143
Gondrol 2321
RinRao 2122
Edwin 2537
Dayan 2415

Ve skriptu student.awk čte detail každého studenta jako jeden záznam, protože awk RS byl přiřazen ke dvojitému znaku nového řádku a každý řádek v záznamu je pole, protože FS je znak nového řádku.

4. Awk ORS Příklad:Výstupní proměnná oddělovače záznamů

Awk ORS je výstupní ekvivalent RS. Každý záznam ve výstupu bude vytištěn s tímto oddělovačem. Následuje příklad awk ORS:

$  awk 'BEGIN{ORS="=";} {print;}' student-marks
Jones 2143 78 84 77=Gondrol 2321 56 58 45=RinRao 2122 38 37 65=Edwin 2537 78 67 45=Dayan 2415 30 47 20=

Ve výše uvedeném skriptu jsou všechny záznamy v souboru se známkami studentů odděleny znakem „=“.

5. Awk NR Příklad:Proměnná počtu záznamů

Awk NR udává celkový počet zpracovávaných záznamů nebo číslo řádku. V následujícím příkladu awk NR má proměnná NR číslo řádku, v sekci END awk NR uvádí celkový počet záznamů v souboru.

$ awk '{print "Processing Record - ",NR;}END {print NR, "Students Records are processed";}' student-marks
Processing Record -  1
Processing Record -  2
Processing Record -  3
Processing Record -  4
Processing Record -  5
5 Students Records are processed

6. Awk NF Příklad:Počet polí v záznamu

Awk NF poskytuje celkový počet polí v záznamu. Awk NF bude velmi užitečné pro ověření, zda v záznamu existují všechna pole.

Vezměme si soubor se známkami studentů, pro studenty chybí skóre Test3, jak je uvedeno níže.

$cat student-marks
Jones 2143 78 84 77
Gondrol 2321 56 58 45
RinRao 2122 38 37
Edwin 2537 78 67 45
Dayan 2415 30 47

Následující skript Awk vytiskne číslo záznamu (řádku) a počet polí v tomto záznamu. Takže bude velmi jednoduché zjistit, že chybí skóre Test3.

$ awk '{print NR,"->",NF}' student-marks
1 -> 5
2 -> 5
3 -> 4
4 -> 5
5 -> 4

7. Awk FILENAME Příklad:Název aktuálního vstupního souboru

Proměnná FILENAME udává název čteného souboru. Awk může přijmout určitý počet vstupních souborů ke zpracování.

$ awk '{print FILENAME}' student-marks
student-marks
student-marks
student-marks
student-marks
student-marks

Ve výše uvedeném příkladu vytiskne FILENAME, tj. studentské známky pro každý záznam vstupního souboru.

8. Awk FNR Příklad:Počet záznamů vzhledem k aktuálnímu vstupnímu souboru

Když awk čte z více vstupního souboru, proměnná awk NR poskytne celkový počet záznamů vzhledem ke všem vstupním souborům. Awk FNR vám poskytne počet záznamů pro každý vstupní soubor.

$ awk '{print FILENAME, FNR;}' student-marks bookdetails
student-marks 1
student-marks 2
student-marks 3
student-marks 4
student-marks 5
bookdetails 1
bookdetails 2
bookdetails 3
bookdetails 4
bookdetails 5

Ve výše uvedeném příkladu namísto awk FNR, pokud použijete awk NR, pro podrobnosti o knize souboru získáte 6 až 10 pro každý záznam.

Doporučená četba

Sed and Awk 101 Hacks, od Rameshe Natarajan . V prostředí UNIX/Linux trávím několik hodin denně a zabývám se textovými soubory (data, konfigurační soubory a soubory protokolu). Sed a Awk používám pro svou práci s textem. Na základě mých zkušeností se Sed and Awk jsem napsal e-knihu Sed and Awk 101 Hacks, která obsahuje 101 praktických příkladů různých pokročilých funkcí Sed a Awk, které zlepší váš život v UNIX / Linux. I když Sed and Awk používáte několik let a nečetli jste tuto knihu, udělejte si laskavost a přečtěte si tuto knihu. Budete ohromeni možnostmi nástrojů Sed a Awk.


Linux
  1. Použijte awk k výpočtu frekvence písmen

  2. 9 výkonných vestavěných funkcí Awk pro numerické funkce

  3. Vysvětlení příkazu awk pomocí ORS, NR, FS, RS

  1. Praktický průvodce učením awk

  2. Začínáme s awk, výkonným nástrojem pro analýzu textu

  3. Průvodce pro začátečníky koukáním

  1. Výukový program Awk:Pochopte proměnné Awk pomocí 3 praktických příkladů

  2. 4 Příklady prohlášení Awk If ( if, if else, if else if, :? )

  3. 7 příkladů výkonných operátorů Awk (unární, binární, aritmetické, řetězcové, přiřazení, podmíněné, regulární awk operátory)