bash - 用awk提取2个文件之间的唯一值
问题描述
比较 2 个文件时,我需要获取 uniq 行。这些文件包含字段分隔符“:”,在比较字符串时应将其视为行尾。
file1 包含这些行
apple:tasty
apple:red
orange:nice
kiwi:awesome
kiwi:expensive
banana:big
grape:green
orange:oval
banana:long
file2 包含这些行
orange:nice
banana:long
输出文件应该是(2 次出现的橙色和 2 次出现的香蕉被删除)
apple:tasty
apple:red
kiwi:awesome
kiwi:expensive
grape:green
所以 : 之前的唯一字符串应该进行比较
是否可以在 1 个命令中完成此任务?
我试图以这种方式完成任务,但字段分隔符在这种情况下不起作用。
awk -F: 'FNR==NR {a[$0]++; next} !a[$0]' file1 file2 > outputfile
解决方案
你基本上有它,但是$0
当你只想处理第一个字段时,指的是整行,即$1
.
您还需要注意输入文件的顺序。要使用 file2 中的值来决定从 file1 中包含哪些行,请首先处理 file2:
$ awk -F: 'FNR==NR {a[$1]++; next} !a[$1]' file2 file1
apple:tasty
apple:red
kiwi:awesome
kiwi:expensive
grape:green
推荐阅读
- java - 如何修复 getPostalCode-null?
- python - 如何从没有 None 字段的类创建字典?
- python - 从 __init__.py 导入时出现 Python 导入错误
- python - 在 Django 2.2 中为 GRAPHENE 设置“SCHEMA”导入模块时出现问题
- python - 如何让 Flask 进行很长时间的操作?
- php - 将 JSON 对象转换为 PHP 数组时出现问题
- puppeteer - Pupeteer:如何在 Linux 上指定 Chromium 路径
- python - 有没有办法搜索匹配关键字而不是全名的文本文件?
- firebase - 用于聊天应用的 Firebase 实时数据库或 Firestore?
- laravel - Laravel MorphMany 关系 - 我错过了什么?