从输入文件中读取单词并轻触包含其他文件中单词的行

时间:2016-05-19 04:50:27

标签: linux shell scripting

我有一个包含4000个单词(A.txt)列表的文件。现在我想要从包含文件sentence_per_line.txt中提到的4000个单词的另一个文件(A.txt)中获取grep行。

我为上述问题编写的shell脚本是

#!/bin/bash
file="A.txt"
while IFS= read -r line
do
        # display $line or do somthing with $line
        printf '%s\n' "$line"
        grep $line sentence_per_line.txt >> output.txt

        # tried printing the grep command to check its working or not 
        result=$(grep "$line" sentence_per_line.txt >> output.txt)
        echo "$result"

done <"$file"

A.txt看起来像这样

applicable
available
White
Black
..

代码既不工作也不显示任何错误。

1 个答案:

答案 0 :(得分:2)

Grep内置了这个:

grep -f A.txt sentence_per_line.txt > output.txt

对您的代码说明:

  • 循环文件以在每一行上执行grep / sed / awk通常是反模式,请参阅this Q&A
  • 如果您的$line参数包含多个单词,则必须引用它(无论如何都不会受到伤害),或者grep尝试查找以该名称命名的文件中的第一个单词第二个字:

    grep "$line" sentence_per_line.txt >> output.txt
    
  • 如果您在循环中编写输出,请勿在循环内重定向,请在外部执行:

    while read -r line; do
        grep "$line" sentence_per_line.txt
    done < "$file" > output.txt
    

    但请记住,首先它通常不是一个好主意。

  • 如果您想写一个文件并同时看到您正在撰写的内容,可以使用tee

    grep "$line" sentence_per_line.txt | tee output.txt
    

    写入output.txt 标准输出。

  • 如果A.txt包含您想要匹配的单词,只有完整的单词匹配,即pattern不匹配longerpattern,您可以使用grep -wf - -w仅匹配完整的字词。

  • 如果A.txt中的字词不是正则表达式,而是固定字符串,则可以使用grep -fF - -F选项查找固定字符串并且速度更快。这两者可以合并:grep -WfF