2012-10-09 32 views
0

在一个制表符分隔的文件追加文本以在现有的制表符分隔的文件列,它需要的形式:从另一个文件

ID |整数|整数

1 12345 56789 
2 11111 233323 
3 43423 789798 

基本上FILE1.TXT是制表符分隔的文件,其中第一列编号1-50 SQL数据库的主键。其他两列只是对应我们数据集的数字。

然后在另一个文件中我有: string |整数

c1 234234 
c10 2342 
c11 5234 
c2 987987 
c3 234234 

在FILE2.TXT,该ID是一个字符串,其中数位是在FILE1.TXT相应的ID。我想将file2.txt中的整数数据附加到file1.txt中。
我所要的输出是

1 12345 56789 234234 
2 11111 233323 987987 
3 43423 789798 234234 

,因为数据在文件2数据库最初创建的方式,该字符串的ID。所以当我们订购时,它是c1,c10,c11,c12 ... c2,c20,c21,c22 ....等等。我想用第一个文件排列数字并追加数据。我怎样才能做到这一点?我非常喜欢bash,只有在我的列已经排好的情况下才能找到粘贴命令。谢谢。使用GNU awk

回答

1

方式一:

awk 'BEGIN { FS=OFS="\t" } FNR==NR { array[substr($1, 2)]=$2; next } { if ($1 in array) print $0, array[$1] }' file2.txt file1.txt 

结果:

1 12345 56789 234234 
2 11111 233323 987987 
3 43423 789798 234234 

编辑:

也许file2.txt字符串可能包含许多非数字字符。如果是这种情况,那么请尝试以下操作:

awk 'BEGIN { FS=OFS="\t" } FNR==NR { gsub(/[^0-9]+/, "", $1); array[$1]=$2; next } { if ($1 in array) print $0, array[$1] }' file2.txt file1.txt 

结果:

1 12345 56789 234234 
2 11111 233323 987987 
3 43423 789798 234234 
相关问题