linux - 从一个文件中读取字符串,grep 在另一个文件中第一次出现

标签 linux unix awk sed grep

我正在从文件 appliances_list.txt 中读取一个字符串。

appliances_list.txt 包含

fridge
dryer
ironbox
microwave 

我正在阅读的文件是 myappliances.txt。内容是

I have a fridge
I have another fridge
I have a refridgerator
I have a microwave
I have ironbox at home
I have another microwave
I have a hairdryer

我在用

grep -o -m1 -f appliances_list.txt myappliances.txt

输出是

冰箱

我想要的输出是每个字符串的第一次出现(完全匹配)

fridge
microwave
ironbox

有人能指出我正确的方向吗?

最佳答案

$ cat tst.awk
NR==FNR { strings[$0]; ++numStrings; next }
{
    for (i=1;i<=NF;i++) {
        if ($i in strings) {
            print $i
            delete strings[$i]
            if (--numStrings == 0) {
                exit
            }
            break
        }
    }
}

$ awk -f tst.awk appliances_list.txt myappliances.txt
fridge
microwave
ironbox

这将非常有效,因为它会在找到字符串列表时从字符串列表中删除每个找到的字符串,因此每一行都需要进行较少的比较,并且当列表中没有更多字符串时将退出程序,因此不会浪费阅读第二个文件的剩余行的时间。

关于linux - 从一个文件中读取字符串,grep 在另一个文件中第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45985910/

相关文章:

linux - 自动 Debian UEFI 安装后的黑色控制台

linux - Ada 程序在 Linux 中有效,但在 GPS Windows 10 中无效

macos - 如何更改Mac终端中的文本颜色和背景?

awk - 跨 ascii 文件行的计算

linux - 如何将文件的日期列转换为用户输入格式

awk - 使用 awk 更改制表符分层文件中的列值,而不更改其他列中的值

linux - 如何将两个音频合并为一个,但使用第一个音频的长度?

python - 如何在python中为linux设置复杂的环境变量?

java - 我们可以通过java访问任何c程序编辑器吗

C - 程序中的 UNIX 命令