加入两个文本文件

时间:2012-10-21 01:22:09

标签: linux file

使用Linux:* .txt文件

文件1

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

file2的

HOUSAM000001189870     
HOUSAM000001237057

输出文件

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

4 个答案:

答案 0 :(得分:1)

grep -F -f file2 file1 > file3

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

file2的:

^4046
^4050
^4047

然后:

grep -f file2 file1 > file3

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

答案 1 :(得分:1)

join命令与sort

结合使用
$ join <(sort 1.txt) <(sort 2.txt)
4046 200344
4047 200122
4050 200001

答案 2 :(得分:1)

还有一个选择:

sed 's/^/^/;s/$/[[:space:]]' file2 | grep -f - file1 > file3

答案 3 :(得分: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 .......