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.
🔖 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ệnh | Mô tả |
---|---|
-F: | Sử dụng dấu hai chấm làm phân tách |
{...} | Chương trình Awk |
In bản ghi hiện tại | |
$1 | Trường đầu tiên |
$NF | Trường cuối cùng |
/etc/passwd | Tệ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ến | Mô tả |
---|---|
$0 | Toàn bộ dòng |
$1, $2...$NF | Trường thứ nhất, thứ hai, ..., cuối cùng |
NR | Số lượng bản ghi |
NF | Số lượng trường |
OFS | Phân tách trường đầu ra (mặc định " ") |
FS | Phân tách trường đầu vào (mặc định " ") |
ORS | Phân tách bản ghi đầu ra (mặc định "\n") |
RS | Phân tách bản ghi đầu vào (mặc định "\n") |
FILENAME | Tê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ức | Mô 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 > 3 | Từ dòng thứ 4 trở đi |
NR == 1 | Dò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 > 4 | Trường cuối cùng > 4 |
NR % 2 == 0 | Dòng chẵn |
NR==10, NR==20 | Từ 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)
awk -F: '{sum += $3}
END { print sum, sum/NR }
' /etc/passwd
awk 'BEGIN {
for (i = 1; i < ARGC; i++)
print ARGV[i] }' a b c
awk 'BEGIN { FS=":";OFS=","}
{print $1,$2,$3,$4}' /etc/passwd
awk 'BEGIN {
if (match("One Two Three", "Tw"))
print RSTART }'
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ến | Mô tả |
---|---|
ARGC | Số lượng đối số |
ARGV | Mảng các đối số |
FNR | Số thứ tự của bản ghi trong tệp |
OFMT | Định dạng cho số (mặc định "%.6g") |
RSTART | Vị trí trong chuỗi |
RLENGTH | Độ dài của sự trùng khớp |
SUBSEP | Dấu phân tách mảng nhiều chiều (mặc định "\034") |
ARGIND | Chỉ 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ệnh | Mô tả |
---|---|
ENVIRON | Biến môi trường |
IGNORECASE | Bỏ qua việc phân biệt chữ hoa/chữ thường |
CONVFMT | Định dạng chuyển đổi số |
ERRNO | Lỗ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.
awk -v var1="Xin chào" -v var2="Thế giới" '
END {print var1, var2}
' </dev/null
awk -v varName="$PWD" '
END {print varName}' </dev/null
3. Awk Operators
⚡️ Toán tử (Operators)
Lệnh | Mô tả |
---|---|
{print $1} | Trường đầu tiên |
$2 == "foo" | Bằng |
$2 != "foo" | Không bằng |
"foo" in array | Trong 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ệnh | Mô 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ệnh | Mô tả |
---|---|
($2 <= 4 || $3 < 20) | Hoặc |
($1 == 4 && $3 < 20) | Và |
⚡️ 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ị.
+ - *
/ % ++
--
+= -= *=
/= %=
== != <
> <= >=
⚡️ 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!";
}'
awk 'BEGIN {
if ("boo" !~ "^fo+$")
print "Boo!";
}'
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àm | Mô 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ố) |
rand | Số 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 |
getline | Thiế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)
awk -F: '{ x[NR] = $0 }
END {
for (i = NR; i > 0; i--)
print x[i]
}
' /etc/passwd
awk -F: '{
for (i = NF; i > 0; i--)
printf("%s ",$i);
print ""
}' /etc/passwd
awk -F: '{
s=0;
for (i = 1; i <= NF; i++)
s += $i;
print s
}' /etc/passwd
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)
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ự.
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ệnh | Mô tả |
---|---|
c | Ký tự ASCII |
d | Số nguyên thập phân |
e, E, f | Số thực dấu động |
o | Giá trị bát phân không dấu |
s | Chuỗ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ứapattern1
hoặcpattern2
.()
: 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ệnh | Mô tả |
---|---|
\b | Ký tự Backspace |
\f | Ký tự Form feed |
\n | Xuống dòng (line feed) |
\r | Ký tự Carriage return |
\t | Ký tự Tab ngang |
\v | Ký 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