0

使用 Linux:*.txt 文件

文件 1

HOUSAM000001189870 1012212222011212100020102102112011002200111112012220110 ....... 
HOUSAM000001213135 2012012000120120102010201002102111200122201100222201102 .......
HOUSAM000001237057 0012011222010210120120122210000101112000222210102010201 .......
HOUSAM000001239242 2210120111010010100100022001111000010220010102010201022 .......

文件2

HOUSAM000001189870     
HOUSAM000001237057

输出文件

HOUSAM000001189870 1012212222011212100020102102112011002200111112012220110 .......
HOUSAM000001237057 0012011222010210120120122210000101112000222210102010201 .......
4

4 回答 4

1
grep -F -f file2 file1 > file3

如果您只需要匹配第一列并且可以更改模式文件,则可以将 ^ 添加到每行的前面并将该文件视为正则表达式(删除第一个 -F)。所以...

文件2:

^4046
^4050
^4047

然后:

grep -f file2 file1 > file3

如果您无法更改模式文件或者它是在您的控制之外生成的,那么 Serge 的答案是最好的答案。

于 2012-10-21T01:28:21.970 回答
1

结合使用该join命令sort

$ join <(sort 1.txt) <(sort 2.txt)
4046 200344
4047 200122
4050 200001
于 2012-10-21T01:30:27.123 回答
1

另一种选择:

sed 's/^/^/;s/$/[[:space:]]' file2 | grep -f - file1 > file3
于 2012-10-21T01:35:12.440 回答
0

一种使用方式awk

 awk 'FNR==NR { array[$1]=$2; next } $1 in array { print $1, array[$1] }' file1.txt file2.txt

结果:

4046 200344
4050 200001
4047 200122

编辑:使用真实数据:

awk 'FNR==NR { array[$1]=$0; next } $1 in array { print array[$1] }' file1.txt file2.txt

结果:

HOUSAM000001189870 1012212222011212100020102102112011002200111112012220110 ....... 
HOUSAM000001237057 0012011222010210120120122210000101112000222210102010201 .......
于 2012-10-21T01:28:47.173 回答