Awk入门
完成条件
Awk 的强大与应用
Awk 语言设计简洁但功能强大,能够在命令行中执行复杂的文本处理操作。
1. 单行转换为双行
需求:将单倍行距的文本转换为双倍行距。
解决方案
awk '{print; print ""}' infile > outfile
说明
print
:打印当前行。print ""
:打印空行(即增加行距)。- 输入:
Line 1 Line 2
- 输出:
Line 1 Line 2
修正:避免双倍空行
问题:如果原文件已有空行,则会被加倍,导致输出文件中出现多个空行。
awk '{print; if (NF != 0) print ""}' infile > outfile
修正方案
- 只有当当前行不为空(即
NF != 0
)时,才打印额外的空行。
2. 统计文件行数
错误方法
awk 'END {print NR}' infile
替代方案
wc -l infile
说明
wc -l
更快、更高效。- 结论:选择合适的工具,避免滥用 Awk。
3. 统计非空行数
问题:如何计算文件中非空行的数量?
解决方案
awk 'NF != 0 {++count} END {print count}' list
说明
NF != 0
:忽略空行。count
:累计非空行数。END {print count}
:最终输出非空行数。
4. 计算文件平均大小
需求:计算一组文件的平均大小(以字节为单位)。
方案
ll | awk 'NR!=1 {s+=$5} END {print "Average: " s/(NR-1)}'
说明
ll
列出文件信息,第 5 列 是文件大小。NR!=1
:跳过ll
输出的第一行(该行显示磁盘总占用)。s+=$5
:累加文件大小。s/(NR-1)
:计算平均值(因跳过了第一行,故NR-1
)。
示例输入
total 10240
-rw-r--r-- 1 user group 40960 Jan 1 10:00 file1.bmp
-rw-r--r-- 1 user group 38400 Jan 1 10:05 file2.bmp
-rw-r--r-- 1 user group 45056 Jan 1 10:10 file3.bmp
示例输出
Average: 41472
5. 计算 Fibonacci 数列
需求:生成 前 10 个 Fibonacci 数。
解决方案
awk 'BEGIN {a=1; b=1; while(++x<=10) {print a; t=a; a=a+b; b=t}; exit}'
说明
a=1; b=1
:初始化 Fibonacci 数列的前两个数。while(++x<=10)
:循环 10 次。print a
:输出当前 Fibonacci 数。t=a; a=a+b; b=t
:更新 Fibonacci 数列。
示例输出
1
2
3
5
8
13
21
34
55
89
总结
任务 | Awk 代码 |
---|---|
双倍行距 | awk '{print; print ""}' infile >
outfile |
避免双倍空行 | awk '{print; if (NF != 0) print ""}'
infile > outfile |
统计文件行数 | wc -l infile |
统计非空行数 | awk 'NF != 0 {++count} END {print
count}' list |
计算平均文件大小 | `ll |
生成 Fibonacci 数列 | awk 'BEGIN {a=1; b=1;
while(++x<=10) {print a; t=a; a=a+b; b=t}; exit}' |
下一章,我们将学习 Awk 的输入处理(File Processing) 🚀
最后修改: 2025年01月30日 星期四 01:28