bash - 我只需要使用 bash 从许多文件中过滤重复的行
问题描述
我有以下三个文件
文件
a
bc
cde
文件b
a
bc
cde
frtdff
文件c
a
bc
cddeeer
erer34
我可以通过这三个文件中的重复行进行过滤。我正在使用以下命令
ls file* | wc -l
返回 3。然后,我正在启动
sort file* | uniq --count --repeated | awk '{ if ($1 == 3) { print $2} }'
最后一个命令准确返回我需要的内容,以防我不创建更多以“文件”开头的文件。
但是,如果我在脚本运行期间需要创建数千个文件,我应该得到从这个命令中检索到的确切数量的文件
n=`ls file* | wc -l`
sort file* | uniq --count --repeated | awk '{ if ($1 == $n) { print $2} }'
不幸的是,变量 n 在 awk 命令的 if 条件中不被接受。
我的问题是我无法在作为 awk 命令一部分的 if 条件中使用变量 n 的值作为比较标准。
解决方案
您可以使用:
awk '!line[$0]++' file*
即使存在于多个文件和/或同一文件中,这也只会打印一次任何字符串。
推荐阅读
- jmeter - 如何将 URL 作为参数传递给 Azure DevOps 中的 JMeter 负载测试执行?
- heroku - 阻止 Heroku 修剪开发依赖项
- mysql - 是 MySQL 命令 $myconnection->disconnect(); Perl 中需要
- jquery - 如何在单击事件处理程序上从 jquery 访问 vue 数据
- reactjs - 使用 react-app-rewired nginx 进行反应生产
- postgresql - 我们如何在 Postgres 中执行 Oracle 序列?
- ember.js - 在 Ember 中创建新记录时出现 Rails ActionController::ParameterMissing 错误
- python - Selenium 加载,但不打印所有 HTML
- symfony - 教义2-空间如何使用多线串类型
- reactjs - 在浏览器解压缩后从浏览器直接将 zip 文件上传到 s3