基于第一个文件中的列表从第二个文件中获取grep / fetch字符串

时间:2014-11-21 16:04:30

标签: linux bash shell awk grep

我有两个文件,想要从第一个文件中的列表中获取第二个文件中的字符串。目前我可以通过grep -Fwf first.txt second.txt获取它,但字数不等于第一个文件。

first.txt

test
test1
..........
..........
.........

second.txt

test:x:16000:16000:Test,Test Travel,423432423423/testaddress,Opened on  apr.10.14:/testdisk/home/test:/bin/nologin
test1:x:16378:55:Test1,Test1 Travel,442342342342/testaddress1,opened on Apr.14.10 :/testdisk/home/test1:/bin/nologin
...................
...................
..................

1 个答案:

答案 0 :(得分:1)

这似乎是/etc/passwd的一部分,您希望在第一个文本块中获得这些用户。

我猜你遇到的问题是你想要获取与第一个:完全匹配的所有名称。

为此,您可以使用:

awk -F":" 'FNR==NR {user[$1]; next} $1 in user' f1 f2

这会将file1中的所有用户名存储在数组user[]中。然后,它会检查哪些内容出现在file2的第一列。

测试

让我们创建一些虚拟数据:

$ cat f1
test
test2
tes
$ cat f2
test:x:16000:16000:Test,Test Travel,423432423423/testaddress,Opened on  apr.10.14:/testdisk/home/test:/bin/nologin
test1:x:16378:55:Test1,Test1 Travel,442342342342/testaddress1,opened on Apr.14.10 :/testdisk1/home/test1:/bin/nologin

运行脚本:

$ awk -F":" 'FNR==NR {a[$1]; next} $1 in a' f1 f2
test:x:16000:16000:Test,Test Travel,423432423423/testaddress,Opened on  apr.10.14:/testdisk/home/test:/bin/nologin