1

需要帮助 grep -f 在 for 循环中运行

基本上对于name.txt中的每个条目,我想从A.txt中grep所有行并在单独的文件中写出来

例如 1) name.txt 是以下三个名称的列表

America
Europe   
Asia

2)A.txt 是(制表符分隔)

X y Z America
x a b Asia
y b c America
a b c Europe
x y z Europe
a b c America

现在从 name.txt 文件中获取每个条目,在 A.txt 中搜索相应的行并返回三个单独的输出文件:

file1: X y Z America
       y b c America
       a b c America

file2: a b c Europe
       x y z Europe
file3: x a b Asia

可能是用脚本编写并用 bash 执行?

提前致谢!!!

4

2 回答 2

2

运行以下脚本(作为 ./script.sh name.txt input.txt),其中 name.txt 具有名称,而 input.txt 是您的输入文件。输出文件保存为 file_America.txt、file_Asia.txt 和 file_Europe.txt

#!/bin/bash -x

while read line; do
#skip empty line
[ -z "$line" ] && continue;
#run grep and save the output
grep "$line" "$2" > file_$line.txt;
done < "$1"
于 2012-08-10T18:42:09.157 回答
0

一种使用方式awk

awk '
    ## Process first file of arguments. Save data in an array, the name as
    ## key, and the number of the output file to write as value.
    FNR == NR {
        name[ $1 ] = FNR;
        next;
    }

    ## Process second file of arguments. Check last field of the line in the 
    ## array and print to file matched by the value.
    FNR < NR {
        print $0 > sprintf( "%s%d", "file", name[ $NF ] );
    }
' name.txt A.txt

检查输出文件:

head file[123]

结果如下:

==> file1 <==
X y Z America
y b c America
a b c America

==> file2 <==
a b c Europe
x y z Europe

==> file3 <==
x a b Asia
于 2012-08-10T19:38:55.970 回答