Linux命令抓取文件之间的类似行

时间:2014-08-11 05:11:05

标签: linux

我有一个文件,每行一个字。

我有第二个文件,每行有很多单词。

我想浏览第一个文件中的每一行,以及在第二个文件中找到它的所有行,我想将第二个文件中的这些行复制到新的第三个文件中。

有没有办法只使用Linux命令执行此操作?

编辑:感谢您的输入。但是,我应该更好地指定:

第一个文件只是一个数字列表(每行一个数字)。

463463 43454 33634

第二个文件非常混乱,我只是寻找那个以任何方式排成一行的数字字符串(不一定是单个单词)。所以,例如

ewjleji jejeti ciwlt 463463.52%

会回击。我认为建议的内容在这种情况下不起作用(请原谅我必须编辑不够详细)

2 个答案:

答案 0 :(得分:2)

如果n是第一个文件中的行数,m是第二个文件中的行数,那么您可以在O(nm)时间内解决此问题方式:

cat firstfile | while read word; do
    grep "$word" secondfile >>thirdfile
done

如果你需要比这更有效地解决它,我认为没有任何内置的实用程序。

至于你的编辑,这个方法确实按你描述的方式工作。

答案 1 :(得分:0)

这是一个可以执行此操作的简短脚本。 需要3个命令行参数 1 - 文件,每行1个字, 2 - 文件,每个字要包含多行在file1和 3 - 输出文件:

#!/bin/bash

## test input and show usage on error
test -n "$1" && test -n "$2" && test -n "$3" || {
    printf "Error: insufficient input, usage: %s file1 file2 file3\n" "${0//*\//}"
    exit 1
}

while read line || test -n "$line" ; do

    grep "$line" "$2" 1>>"$3" 2>/dev/null

done <"$1"

示例:

$ cat words.txt
me
you
them

$ cat lines.txt
This line is for me
another line for me
maybe another for me
one for you
another for you
some for them
another for them
here is one that doesn't match any

$ bash ../lines.sh words.txt lines.txt outfile.txt

$ cat outfile.txt
This line is for me
another line for me
maybe another for me
some for them
one for you
another for you
some for them
another for them

(是的,我知道me也与示例文件中的some匹配,但这不是重点。