awk 是一個功能強大的文本處理工具,在 Linux 系統中常被用來處理和分析文本數據。以下是 awk 的一些基本用法:
1. 基本語法:
```
awk 'pattern { action }' filename
```
其中 pattern 是選擇的條件,若條件成立則執行後面的 action,filename 是待處理的文本文件。
2. 印出指定列:
```
awk '{print $1,$3}' filename
```
這個例子會印出文件中每一行的第一和第三個欄位。
3. 條件選擇:
```
awk '$3 > 10 {print $1}' filename
```
這個例子會印出文件中第三個欄位大於 10 的行的第一個欄位。
4. 計算欄位之和:
```
awk '{sum += $2} END {print sum}' filename
```
這個例子會將文件中第二個欄位的值加總起來並印出總和。
5. 自定義分隔符號:
```
awk -F':' '{print $1}' filename
```
這個例子將分隔符號設置為冒號,並印出每行的第一個欄位。
以上是 awk 的一些基本用法,讓你可以開始在 Linux 系統中使用 awk 工具處理文本數據。
```bash
#NF: colums in one line
#NR: current line
#FS: split charactor
last | awk '{print $1 "\t lines: " NR "\t columes: " NF}'
cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t " $3}'
cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'
# get CPU idle percent for test
top -n 1 | awk '{FS=","}NR==3{printf "%s\n",$0; printf "%s\n",$4}'
# get CPU idle percent
top -n 1 | awk '{FS=","}NR==3{printf "%s\n",$4}' | awk '{printf "%f", $2}'
```
pay.txt
``` text
Name 1st 2nd 3th
VBird 23000 24000 25000
DMTsai 21000 20000 23000
Bird2 43000 42000 41000
```
```bash
cat pay.txt | awk \
'NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total" }
NR>=2{total = $2 + $3 + $4 ;
printf "%10s %10d %10d %10d %10.2f\n", $1, $2, $3, $4, total}'
```
```
Name 1st 2nd 3th Total
VBird 23000 24000 25000 72000.00
DMTsai 21000 20000 23000 64000.00
Bird2 43000 42000 41000 126000.00
```
/tmp/data.txt
```
foo bar 12,300.50
foo bar 2,300.50
abc xyz 1,22,300.50
```
```bash
awk '{ gsub(",","",$3); print $3 }' /tmp/data.txt
```
```bash
VAR=3
echo $VAR
echo | awk -v env_var="$VAR" '{print "The value of VAR is " env_var}'
#Using output of awk to run command
awk '{ system("openssl s_client -connect host:port -cipher " $1) }' ciphers.txt
awk '{print $0}' <ciphers.txt | xargs -I{} openssl s_client -connect host:port -cipher {} >>results.txt
```