通过 awk 统计多个文件不同行的行数
时间: 2025-06-24 09:44:19 AIGC 浏览: 21
### 使用 `awk` 统计多个文件中不同行的行数
当需要统计多个文件中具有唯一性的行数时,可以利用 `awk` 的内置关联数组功能来去重并统计这些不同的行。以下是具体实现方法:
```bash
awk '!seen[$0]++' file1 file2 file3 | wc -l
```
这段命令的作用是遍历所有指定的文件 (`file1`, `file2`, `file3`),并通过 `!seen[$0]++` 来过滤掉重复的行[^1]。这里 `$0` 表示整行内容,而 `seen` 是一个关联数组,用来记录每行是否已经出现过。如果某一行未被记录,则将其加入到输出流中;反之则忽略该行。最后通过管道传递给 `wc -l` 命令以计算剩余的不同行总数。
#### 更复杂情况处理
假如我们面对的是大量文件甚至整个目录下所有的文本文件,并且希望一次性完成这项任务,那么可以结合 `find` 和 `xargs` 等工具扩展上述基本方案:
```bash
find . -type f -name "*.txt" -print0 | xargs -0 awk '!seen[$0]++' | wc -l
```
在这里,`find` 负责查找当前目录及其子目录内的所有 `.txt` 文件[^4] ,并将它们零终止的名字列表交给 `xargs` 处理。后者再把这些名字作为参数提供给后续的 `awk` 进程链执行相同的功能——去除重复项之后再次调用 `wc -l` 获取最终的结果。
此外,如果我们还需要知道哪些具体的行被认为是唯一的,可以在上面的基础上稍作改动,保留原始数据的同时也给出总计信息:
```bash
find . -type f -name "*.txt" -print0 | \
xargs -0 awk '
{
if (!seen[$0]++) {
unique_lines[++unique_count]=$0;
}
}
END {
for(i=1;i<=unique_count;i++) print "Unique Line:", i, "->", unique_lines[i];
print "\nTotal Unique Lines Counted:", unique_count;
}'
```
此版本除了继续追踪独一无二的行之外,还额外保存了每一个这样的实例以便于进一步审查或报告用途[^5]。
---
###
阅读全文
相关推荐
















