Chuyển tới nội dung chính

Awk - Cheatsheet

Tham khảo về GNU awk, bao gồm các biểu thức và lệnh awk được sử dụng phổ biến.

cửa hàng
roadmaps
cheatsheet
tài liệu phỏng vấn

🔖 Gợi ý từ Admin

📝 Tài liệu phỏng vấn kiến thức lập trình: Xem tại đây!!!

📌 Tìm hiểu về thuật toán: Xem tại đây!!!

📌 Roadmaps - Lộ trình trở thành một lập trình viên: Xem tại đây!!!

⚡️ Cheatsheet các ngôn ngữ lập trình: Xem tại đây!!!

⚡️ Handbook lập trình: Xem tại đây!!!

I. Tổng hợp Awk Cheatsheet

1. Cơ bản

⚡️ Hãy thử lệnh sau

$ awk -F: '{print $1, $NF}' /etc/passwd

Giải thích

LệnhMô tả
-F:Sử dụng dấu hai chấm làm phân tách
{...}Chương trình Awk
printIn bản ghi hiện tại
$1Trường đầu tiên
$NFTrường cuối cùng
/etc/passwdTệp dữ liệu đầu vào

⚡️ Chương trình Awk

BEGIN          {<khởi tạo ban đầu>}
<mẫu 1> {<các hành động chương trình>}
<mẫu 2> {<các hành động chương trình>}
...
END {<hành động cuối cùng>}

Trong Awk, một chương trình thường có cấu trúc như trên. Phần BEGIN chứa các lệnh được thực hiện trước khi xử lý dữ liệu, END chứa các lệnh được thực hiện sau khi xử lý dữ liệu, và giữa chúng là các cặp pattern (mẫu) và program actions (các hành động), trong đó mỗi cặp định nghĩa một hành động cụ thể được thực hiện khi một dòng thỏa mãn pattern.

⚡️ Ví dụ

awk '
BEGIN { print "\n>>>Start" }
!/(login|shutdown)/ { print NR, $0 }
END { print "<<<END\n" }
' /etc/passwd

⚡️ Ví dụ về chương trình Awk

awk 'BEGIN {print "hello world"}'   # In ra "hello world"
awk -F: '{print $1}' /etc/passwd # -F: Chỉ định bộ phân tách trường

# /pattern/ Thực hiện hành động chỉ khi có mẫu phù hợp
awk -F: '/root/ {print $1}' /etc/passwd

# Phần BEGIN được thực hiện một lần ở đầu tiên
awk -F: 'BEGIN { print "uid"} { print $1 }' /etc/passwd

# Phần END được thực hiện một lần ở cuối cùng
awk -F: '{print $1} END { print "-hoàn thành-"}' /etc/passwd

Trong các ví dụ trên, bạn có thể thấy cách sử dụng BEGIN để thực hiện hành động một lần ở đầu, END để thực hiện hành động một lần ở cuối, và cách sử dụng /pattern/ để thực hiện hành động chỉ khi có mẫu phù hợp.

⚡️ Biến (Variables)

          $1      $2/$(NF-1)    $3/$NF
▼ ▼ ▼
┌──────┬──────────────┬───────┐
$0/NR ▶ │ ID │ WEBSITE │ URI │
├──────┼──────────────┼───────┤
$0/NR ▶ │ 1 │ quickref.me │ awk │
├──────┼──────────────┼───────┤
$0/NR ▶ │ 2 │ google.com │ 25
└──────┴──────────────┴───────┘

# Trường đầu tiên và cuối cùng
awk -F: '{print $1,$NF}' /etc/passwd

# Với số dòng
awk -F: '{print NR, $0}' /etc/passwd

# Trường thứ hai từ cuối
awk -F: '{print $(NF-1)}' /etc/passwd

# Chuỗi tùy chỉnh
awk -F: '{print $1 "=" $6}' /etc/passwd

⚡️ Điều kiện

awk -F: '$3>30 {print $1}' /etc/passwd

Trong ví dụ trên, lệnh Awk sẽ in ra trường đầu tiên của mỗi dòng trong tệp /etc/passwd nếu giá trị của trường thứ ba ($3, đại diện cho User ID) lớn hơn 30. Điều này thể hiện cách sử dụng điều kiện ($3>30) trong một lệnh Awk để lọc và xử lý dữ liệu dựa trên giá trị của một trường cụ thể.

⚡️ Tạo 1000 khoảng trắng (Generate 1000 spaces)

awk 'BEGIN{
while (a++ < 1000)
s = s " ";
print s
}'

Trong đoạn mã trên, lệnh Awk sử dụng phần BEGIN để thực hiện một loạt các lệnh khi bắt đầu thực hiện chương trình Awk. Một vòng lặp while được sử dụng để thêm 1000 khoảng trắng vào chuỗi s, sau đó chuỗi này được in ra màn hình.

⚡️ Mảng (Arrays)

awk 'BEGIN {
fruits["mango"] = "vàng";
fruits["orange"] = "cam";
for(fruit in fruits) {
print "Màu của quả " fruit " là " fruits[fruit]
}
}'

Trong đoạn mã trên, lệnh Awk sử dụng phần BEGIN để khởi tạo một mảng fruits với các giá trị tương ứng. Sau đó, một vòng lặp for được sử dụng để lặp qua mảng và in ra màn hình màu sắc của từng loại quả.

⚡️ Hàm (Functions)

# => 5
awk 'BEGIN{print length("xin chào")}'
# => XIN CHÀO
awk 'BEGIN{print toupper("xin chào")}'
# => xin
awk 'BEGIN{print substr("xin chào", 1, 3)}'

Trong ví dụ trên, các hàm Awk như length(), toupper(), và substr() được sử dụng để tính độ dài của chuỗi, chuyển đổi sang chữ in hoa, và trích xuất một phần của chuỗi tương ứng.

2. Awk Variables

⚡️ Biến tích hợp sẵn (Build-in variables): Các biến tích hợp sẵn này cung cấp thông tin quan trọng như toàn bộ dòng, các trường, số lượng bản ghi, số lượng trường, các phân tách trường và bản ghi, và tên của tệp đang được xử lý.

Tên biếnMô tả
$0Toàn bộ dòng
$1, $2...$NFTrường thứ nhất, thứ hai, ..., cuối cùng
NRSố lượng bản ghi
NFSố lượng trường
OFSPhân tách trường đầu ra (mặc định " ")
FSPhân tách trường đầu vào (mặc định " ")
ORSPhân tách bản ghi đầu ra (mặc định "\n")
RSPhân tách bản ghi đầu vào (mặc định "\n")
FILENAMETên của tệp

⚡️ Biểu thức (Expressions): Các biểu thức này mô tả các điều kiện và thao tác phổ biến trong Awk khi xử lý dữ liệu.

Biểu thứcMô tả
$1 == "root"Trường đầu tiên bằng "root"
{print $(NF-1)}Trường thứ hai từ cuối
NR!=1{print $0}Từ dòng thứ 2 trở đi
NR > 3Từ dòng thứ 4 trở đi
NR == 1Dòng đầu tiên
END{print NR}Tổng số dòng
BEGIN{print OFMT}Định dạng xuất
{print NR, $0}Số dòng và nội dung dòng
{print NR " " $0}Số dòng (tab) và nội dung dòng
{$1 = NR; print}Thay thế trường thứ nhất bằng số dòng
$NF > 4Trường cuối cùng > 4
NR % 2 == 0Dòng chẵn
NR==10, NR==20Từ dòng 10 đến dòng 20
BEGIN{print ARGC}Tổng số tham số dòng lệnh
ORS=NR%5?",":"\n"Nối các dòng

⚡️ Ví dụ (Examples)

In tổng và trung bình
awk -F: '{sum += $3}
END { print sum, sum/NR }
' /etc/passwd
In các tham số
awk 'BEGIN {
for (i = 1; i < ARGC; i++)
print ARGV[i] }' a b c
Phân tách trường đầu ra bằng dấu phẩy
awk 'BEGIN { FS=":";OFS=","}
{print $1,$2,$3,$4}' /etc/passwd
Vị trí của sự trùng khớp
awk 'BEGIN {
if (match("One Two Three", "Tw"))
print RSTART }'
Độ dài của sự trùng khớp
awk 'BEGIN {
if (match("One Two Three", "re"))
print RLENGTH }'

⚡️ Biến môi trường (Environment Variables): Các biến môi trường này chứa thông tin về số lượng và giá trị của các đối số, số thứ tự của bản ghi trong tệp, định dạng cho số, vị trí và độ dài của sự trùng khớp, dấu phân tách cho mảng nhiều chiều, và chỉ số của đối số đang được xử lý.

BiếnMô tả
ARGCSố lượng đối số
ARGVMảng các đối số
FNRSố thứ tự của bản ghi trong tệp
OFMTĐịnh dạng cho số (mặc định "%.6g")
RSTARTVị trí trong chuỗi
RLENGTHĐộ dài của sự trùng khớp
SUBSEPDấu phân tách mảng nhiều chiều (mặc định "\034")
ARGINDChỉ số đối số

⚡️ Chỉ dành cho GNU awk (GNU awk only): Các lệnh này đặc biệt cho GNU Awk và cung cấp thông tin và tùy chọn đặc biệt không có sẵn trong các phiên bản khác của Awk.

LệnhMô tả
ENVIRONBiến môi trường
IGNORECASEBỏ qua việc phân biệt chữ hoa/chữ thường
CONVFMTĐịnh dạng chuyển đổi số
ERRNOLỗi hệ thống
FIELDWIDTHSĐộ rộng cố định của trường

⚡️ Định nghĩa biến (Defining variable): Trong ví dụ dưới đây, cú pháp -v được sử dụng để định nghĩa và sử dụng biến trong Awk. Biến này có thể được sử dụng trong các phần khác nhau của chương trình Awk.

Định nghĩa biến
awk -v var1="Xin chào" -v var2="Thế giới" '
END {print var1, var2}
' </dev/null
Sử dụng biến shell
awk -v varName="$PWD" '
END {print varName}' </dev/null

3. Awk Operators

⚡️ Toán tử (Operators)

LệnhMô tả
{print $1}Trường đầu tiên
$2 == "foo"Bằng
$2 != "foo"Không bằng
"foo" in arrayTrong mảng

⚡️ Biểu thức chính quy (Regular expression): Trong Awk, biểu thức chính quy được sử dụng để so khớp và lọc dữ liệu dựa trên mẫu quy định.

LệnhMô tả
/regex/Dòng trùng khớp
!/regex/Dòng không trùng khớp
$1 ~ /regex/Trường trùng khớp
$1 !~ /regex/Trường không trùng khớp

⚡️ Các điều kiện khác (More conditions): Trong Awk, bạn có thể sử dụng các điều kiện khác nhau để kết hợp và kiểm tra các điều kiện phức tạp trong quá trình xử lý dữ liệu.

LệnhMô tả
($2 <= 4 || $3 < 20)Hoặc
($1 == 4 && $3 < 20)

⚡️ Các phép toán (Operations): Trong ngữ cảnh của Awk, các phép toán này được sử dụng để thực hiện các phép toán số học, gán rút gọn và so sánh giữa các giá trị.

Các phép toán số học
+     -     *
/ % ++
--
Gán rút gọn
+=     -=     *=
/= %=
Các toán tử so sánh
==     !=     <
> <= >=

⚡️ Ví dụ (Examples): Trong các ví dụ này, Awk được sử dụng để kiểm tra xem một chuỗi khớp hoặc không khớp với một biểu thức chính quy, và kiểm tra xem một giá trị có trong một mảng hay không.

awk 'BEGIN {
if ("foo" ~ "^fo+$")
print "Fooey!";
}'
Không trùng khớp
awk 'BEGIN {
if ("boo" !~ "^fo+$")
print "Boo!";
}'
if trong mảng
awk 'BEGIN {
assoc["foo"] = "bar";
assoc["bar"] = "baz";
if ("foo" in assoc)
print "Fooey!";
}'

4. Awk Functions

⚡️ Các hàm phổ biến (Common functions): Các hàm này là những hàm phổ biến mà bạn có thể sử dụng để thực hiện các tác vụ thường gặp trong chương trình Awk.

HàmMô tả
index(s,t)Vị trí trong chuỗi s mà chuỗi t xuất hiện, 0 nếu không tìm thấy
length(s)Độ dài của chuỗi s (hoặc $0 nếu không có đối số)
randSố ngẫu nhiên giữa 0 và 1
substr(s,index,len)Trả về chuỗi con có độ dài len của chuỗi s bắt đầu từ vị trí index (đếm từ 1)
srandĐặt giá trị khởi tạo cho rand và trả về giá trị khởi tạo trước đó
int(x)Cắt x thành giá trị số nguyên
split(s,a,fs)Tách chuỗi s thành mảng a tách bằng fs, trả về độ dài của a
match(s,r)Vị trí trong chuỗi s mà biểu thức chính quy r xuất hiện, hoặc 0 nếu không tìm thấy
sub(r,t,s)Thay thế chuỗi t cho sự xuất hiện đầu tiên của biểu thức chính quy r trong chuỗi s (hoặc $0 nếu không có s)
gsub(r,t,s)Thay thế chuỗi t cho tất cả các xuất hiện của biểu thức chính quy r trong chuỗi s
system(cmd)Thực hiện lệnh cmd và trả về trạng thái thoát
tolower(s)Chuyển đổi chuỗi s thành chữ thường
toupper(s)Chuyển đổi chuỗi s thành chữ in hoa
getlineThiết lập $0 thành bản ghi đầu vào tiếp theo từ tệp đầu vào hiện tại.

⚡️ Hàm do người dùng định nghĩa (User defined function): Awk sử dụng các hàm do người dùng định nghĩa để tìm giá trị tối thiểu và tối đa của hai số và hiển thị kết quả.

awk '
# Trả về số nhỏ nhất
function find_min(num1, num2){
if (num1 < num2)
return num1
return num2
}
# Trả về số lớn nhất
function find_max(num1, num2){
if (num1 > num2)
return num1
return num2
}
# Hàm chính
function main(num1, num2){
result = find_min(num1, num2)
print "Tối thiểu =", result

result = find_max(num1, num2)
print "Tối đa =", result
}
# Kịch bản bắt đầu thực hiện tại đây
BEGIN {
main(10, 60)
}
'

5. Awk Arrays

⚡️ Mảng với chỉ số (Array with index): Awk sử dụng một mảng với chỉ số để lưu trữ và truy xuất giá trị. Hàm delete được sử dụng để xóa một phần tử khỏi mảng.

awk 'BEGIN {
arr[0] = "foo";
arr[1] = "bar";
print(arr[0]); # => foo
delete arr[0];
print(arr[0]); # => ""
}'

⚡️ Mảng với khoá (Array with key): Awk sử dụng một mảng với khóa để lưu trữ và kiểm tra sự tồn tại của một khóa trong mảng. Hàm in được sử dụng để kiểm tra xem một khóa có trong mảng hay không.

awk 'BEGIN {
assoc["foo"] = "bar";
assoc["bar"] = "baz";
print("baz" in assoc); # => 0
print("foo" in assoc); # => 1
}'

⚡️ Mảng với hàm split (Array with split): hàm split được sử dụng để tách một chuỗi thành một mảng, sau đó sử dụng vòng lặp để in ra từng phần tử của mảng.

awk 'BEGIN {
split("foo:bar:baz", arr, ":");
for (key in arr)
print arr[key];
}'

⚡️ Mảng với hàm asort (Array with asort): hàm asort được sử dụng để sắp xếp mảng theo thứ tự tăng dần và sau đó sử dụng vòng lặp để in ra từng phần tử của mảng đã sắp xếp.

awk 'BEGIN {
arr[0] = 3
arr[1] = 2
arr[2] = 4
n = asort(arr)
for (i = 1; i <= n ; i++)
print(arr[i])
}'

⚡️ Mảng nhiều chiều (Multi-dimensional): Awk sử dụng một mảng nhiều chiều với các chỉ số của từng chiều để lưu trữ giá trị. Mảng này có thể được sử dụng để biểu diễn các bảng và dữ liệu có cấu trúc phức tạp hơn.

awk 'BEGIN {
multidim[0,0] = "foo";
multidim[0,1] = "bar";
multidim[1,0] = "baz";
multidim[1,1] = "boo";
}'

⚡️ Lặp qua mảng nhiều chiều (Multi-dimensional iteration): Awk sử dụng một vòng lặp để duyệt qua tất cả các phần tử của một mảng nhiều chiều và in ra giá trị của từng phần tử và chỉ số của nó.

awk 'BEGIN {
array[1,2]=3;
array[2,3]=5;
for (comb in array) {
split(comb,sep,SUBSEP);
print sep[1], sep[2],
array[sep[1],sep[2]]
}
}'

6. Awk Conditions

⚡️ Câu lệnh if-else (if-else statement): Awk sử dụng câu lệnh if-else để kiểm tra giá trị của biến count. Nếu count bằng 1, nó in ra "Có", ngược lại in ra "Gì vậy?".

awk -v count=2 'BEGIN {
if (count == 1)
print "Có";
else
print "Gì vậy?";
}'

⚡️ Toán tử ba ngôi (Ternary operator): Awk sử dụng toán tử ba ngôi để kiểm tra giá trị của biến count. Nếu count bằng 1, nó in ra "Có", ngược lại in ra "Gì vậy?".

awk -v count=2 'BEGIN {
print (count==1) ? "Có" : "Gì vậy?";
}'

⚡️ Tồn tại (Exists): Awk sử dụng toán tử in để kiểm tra xem khóa "foo" có tồn tại trong mảng assoc hay không. Nếu có, nó in ra "Fooey!".

awk 'BEGIN {
assoc["foo"] = "bar";
assoc["bar"] = "baz";
if ("foo" in assoc)
print "Fooey!";
}'

⚡️ Không tồn tại (Not exists): Awk sử dụng toán tử in để kiểm tra xem khóa "Huh" có tồn tại trong mảng assoc hay không. Nếu không, nó in ra "Huh!".

awk 'BEGIN {
assoc["foo"] = "bar";
assoc["bar"] = "baz";
if ("Huh" in assoc == 0 )
print "Huh!";
}'

⚡️ switch: Awk sử dụng câu lệnh switch để kiểm tra giá trị của biểu thức và thực hiện các hành động tương ứng với mỗi trường hợp. Câu lệnh break được sử dụng để kết thúc việc thực hiện các trường hợp.

awk -F: '{
switch (NR * 2 + 1) {
case 3:
case "11":
print NR - 1
break

case /2[[:digit:]]+/:
print NR

default:
print NR + 1

case -1:
print NR * -1
}
}' /etc/passwd

7. Awk Loops

⚡️ for...i: Awk sử dụng vòng lặp for để lặp qua giá trị của biến i từ 0 đến 9 và in ra giá trị của i. Trong ví dụ thứ hai, nó sử dụng vòng lặp for để in ra các lũy thừa của 2 từ 1 đến 100.

awk 'BEGIN {
for (i = 0; i < 10; i++)
print "i=" i;
}'

# Các lũy thừa của hai từ 1 đến 100
awk 'BEGIN {
for (i = 1; i <= 100; i *= 2)
print i
}'

⚡️ for...in: Awk sử dụng vòng lặp for...in để lặp qua các khóa của một mảng hoặc các tham số truyền vào chương trình. Các giá trị tương ứng với mỗi khóa được in ra.

awk 'BEGIN {
assoc["key1"] = "val1"
assoc["key2"] = "val2"
for (key in assoc)
print assoc[key];
}'

# Các tham số
awk 'BEGIN {
for (argnum in ARGV)
print ARGV[argnum];
}' a b c

⚡️ while và do...while: Awk sử dụng cả vòng lặp while và do...while để thực hiện các hành động lặp. Vòng lặp while lặp lại một khối mã trong khi một điều kiện cụ thể đúng. Vòng lặp do...while thực hiện một khối mã ít nhất một lần, sau đó lặp lại nó trong khi một điều kiện cụ thể đúng.

awk 'BEGIN {
while (a < 10) {
print "- " " concatenation: " a
a++;
}
}'

# do...while
awk '{
i = 1
do {
print $0
i++
} while (i <= 5)
}' /etc/passwd

⚡️ Break: Awk sử dụng lệnh break để kết thúc vòng lặp for nếu giá trị của i bằng break_num.

awk 'BEGIN {
break_num = 5
for (i = 0; i < 10; i++) {
print i
if (i == break_num)
break
}
}'

⚡️ Continue: Awk sử dụng lệnh continue để bỏ qua các bước tiếp theo của vòng lặp khi x có giá trị là 5 hoặc 6.

awk 'BEGIN {
for (x = 0; x <= 10; x++) {
if (x == 5 || x == 6)
continue
printf "%d ", x
}
print ""
}'

⚡️ Ví dụ (Examples)

Đảo ngược các bản ghi
awk -F: '{ x[NR] = $0 }
END {
for (i = NR; i > 0; i--)
print x[i]
}
' /etc/passwd
Đảo ngược các trường
awk -F: '{
for (i = NF; i > 0; i--)
printf("%s ",$i);
print ""
}' /etc/passwd
Tổng theo từng bản ghi
awk -F: '{
s=0;
for (i = 1; i <= NF; i++)
s += $i;
print s
}' /etc/passwd
Tổng cả tệp
awk -F: '
{for (i = 1; i <= NF; i++)
s += $i;
};
END{print s}
' /etc/passwd

8. Awk Formatted Printing

⚡️ Cách sử dụng (Usage)

Căn phải
awk 'BEGIN{printf "|%10s|\n", "hello"}'

# | hello|

printf "|%10s|\n", "hello": Dùng để in ra chuỗi "hello" được căn phải trong một ô chiều rộng là 10 ký tự. Ký tự %10s có nghĩa là chuỗi sẽ được căn phải trong một ô chiều rộng 10 ký tự.

Căn trái
awk 'BEGIN{printf "|%-10s|\n", "hello"}'

# |hello |

printf "|%-10s|\n", "hello": Dùng để in ra chuỗi "hello" được căn trái trong một ô chiều rộng là 10 ký tự. Ký tự %-10s có nghĩa là chuỗi sẽ được căn trái trong một ô chiều rộng 10 ký tự.

⚡️ Các định dạng thông thường

LệnhMô tả
cKý tự ASCII
dSố nguyên thập phân
e, E, fSố thực dấu động
oGiá trị bát phân không dấu
sChuỗi ký tự
%Ký tự % chữ

⚡️ Khoảng trắng (Space): lệnh awk được sử dụng để đọc nội dung của tệp /etc/passwd và in ra tên người dùng (cột đầu tiên) và đường dẫn thư mục home (cột cuối cùng trừ 1) của ba người dùng đầu tiên. Đối với mỗi dòng, printf được sử dụng để định dạng và in ra theo kiểu căn trái và phải với một khoảng trắng chiều rộng 10 ký tự.

awk -F: '{
printf "%-10s %s\n", $1, $(NF-1)
}' /etc/passwd | head -n 3

# Kết quả
root /root
bin /bin
daemon /sbin

⚡️ Tiêu đề (Header): Awk được sử dụng để đọc nội dung của tệp /etc/passwd và in ra tên người dùng (cột đầu tiên) và đường dẫn thư mục home (cột cuối cùng trừ 1) của năm người dùng đầu tiên. Đầu tiên, BEGIN block được sử dụng để in ra tiêu đề với định dạng căn trái. Sau đó, dòng lệnh { printf "%-10s %s\n", $1, $(NF-1) } được sử dụng để in ra thông tin về người dùng và thư mục home.

awk -F: 'BEGIN {
printf "%-10s %s\n", "Người dùng", "Thư mục gốc"
printf "%-10s %s\n", "--------","-----------"}
{ printf "%-10s %s\n", $1, $(NF-1) }
' /etc/passwd | head -n 5

# Kết quả
Người dùng Thư mục gốc
-------- -----------
root /root
bin /bin
daemon /sbin

9. Miscellaneous

⚡️ Regex Metacharacters

\     ^     $
. [ ]
| ( )
* + ?

Trong biểu thức chính quy (regex) của Awk, các ký tự sau đây được coi là ký tự meta:

  • \: Sử dụng để bỏ đi tính đặc biệt của một ký tự.
  • ^: Đặt tại đầu dòng.
  • $: Đặt tại cuối dòng.
  • .: Đại diện cho một ký tự bất kỳ (ngoại trừ ký tự xuống dòng).
  • []: Tập hợp các ký tự, ví dụ [aeiou] tương đương với bất kỳ nguyên âm nào.
  • |: Toán tử "hoặc", ví dụ pattern1|pattern2 tương đương với nếu một dòng chứa pattern1 hoặc pattern2.
  • (): Nhóm các biểu thức chính quy.
  • *: Ký tự trước đó xuất hiện 0 hoặc nhiều lần.
  • +: Ký tự trước đó xuất hiện ít nhất một lần.
  • ?: Ký tự trước đó xuất hiện 0 hoặc 1 lần.

⚡️ Chuỗi Escape (Escape Sequences): Trong các biểu thức chính quy (regex) của Awk, các chuỗi escape như \n, \t được sử dụng để biểu thị các ký tự đặc biệt như dấu xuống dòng, tab ngang, v.v.

LệnhMô tả
\bKý tự Backspace
\fKý tự Form feed
\nXuống dòng (line feed)
\rKý tự Carriage return
\tKý tự Tab ngang
\vKý tự Tab dọc

⚡️ Chạy script (Run script)

$ cat demo.awk
#!/usr/bin/awk -f
BEGIN { x = 23 }
{ x += 2 }
END { print x }
$ awk -f demo.awk /etc/passwd
69

II. Tài liệu tham khảo

Chia sẻ: