你好我正在写一个脚本从列表中提取一些行,主要的想法是我有一个名单列表,我想创建一个只有那些人的信息的存档,第一个列表如下所示:
Name Address Age
Steve 72 Andover Dr. 11
Yuri 1133 Nicholas Av. 14
David 110 Arlington Street 11
Andy 38 Devonshire Road 11
Dan 38 Devonshire Road 14
Blaine 59 Village Road 11
Justin 59 Village Road 11
Rob 39 Jackson Drive 15
Russell 39 Jackson Dr 14
Justin 16 Crestwood Rd. 17
Tristan 75 Peak Avenue 11
Marty 101 Captains Walk 16
Jason 73 Minuteman Dr. 13
Joe 73 Minuteman Dr. 11
Philip 61 Prospect Avenue 11
Evan 281 Burnt Plains Road 11
名称列表如下:
Andy
Russell
Philip
Evan
我想生成一个名为newlist.txt的新存档,该存档应仅包含以下信息:
Andy 38 Devonshire Road 11
Russell 39 Jackson Dr 14
Philip 61 Prospect Avenue 11
Evan 281 Burnt Plains Road 11
为了实现这一点,我尝试编写以下脚本:
#!/bin/bash
while read line
do
grep $line $2 >> newlist.txt
done <$1
我正在获取文件newlist.txt以及人员的信息,事实上我的脚本运行良好,但我不确定这是否是最好的方法,我正在考虑足够的注意事项,因为我将使用它由于篇幅很长,我决定展示我的代码以便收到建议,谢谢你们。
答案 0 :(得分:2)
使用GNU grep,sed和bash:
grep -f <(sed 's/.*/^&[ \t]/' file2) file1
输出:
Andy 38 Devonshire Road 11 Russell 39 Jackson Dr 14 Philip 61 Prospect Avenue 11 Evan 281 Burnt Plains Road 11
答案 1 :(得分:1)
使用awk可以在不使用正则表达式的情况下执行此操作:
awk 'FNR==NR{seen[$1]; next} $1 in seen' names.txt list.txt
Andy 38 Devonshire Road 11
Russell 39 Jackson Dr 14
Philip 61 Prospect Avenue 11
Evan 281 Burnt Plains Road 11