从另一个文件grep特定部分字符串

时间:2015-06-15 06:03:56

标签: awk grep

我想从2.txt中的零后面的前三位数字中查看1.txt中数字的前三位数。

cat 1.txt

 23456
 12345
 6789

cat 2.txt

 20000023485 xxx888
 20000012356 xxx888
 20000067234 xxx234

预期输出

 20000023485 xxx888
 20000012356 xxx888

3 个答案:

答案 0 :(得分:1)

尝试使用grep:

grep -f <(sed 's/^\(...\).*/00\1/' file1) file2

输出:

20000023485 xxx
20000012356 xxx

答案 1 :(得分:1)

awk 'FNR==NR {a[substr($1,0,3)];next}
             {match($1, /0+/);
             if(substr($1, RSTART+RLENGTH,3) in a)print}' 1.txt 2.txt

{a[substr($1,0,3)];next} - 将前3个字符存储在关联数组中。

match($1, /0+/);if(substr($1, RSTART+RLENGTH,3) in a) 在一系列零之后匹配3个字符,并检查先前创建的关联数组中是否存在这3个字符,如果找到匹配则打印整行。

答案 2 :(得分:0)

grep -f将匹配给定文件中的一系列模式,每行一个。但首先你需要将1.txt变成你想要的模式。在你的情况下,你想要每行1.txt的前三个字符,在零之后:00 * 234,00 * 123等。(我假设你想要至少一个零。)

sed -e 's/^\(...\).*$/00*\1/' 1.txt > 1f.txt
grep -f 1f.txt 2.txt