0

在一个制表符分隔的文件中,它采用以下形式:

身份证 | 整数 | 整数

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

由于最初在 file2 数据库中创建数据的方式,该字符串是 ID。所以当我们订购它时,它是 c1,c10,c11,c12...c2,c20,c21,c22...等。我想将数字与第一个文件对齐并附加数据。我怎样才能做到这一点?我很不喜欢 bash,只有在我的列已经完美排列时才找到粘贴命令。谢谢。

4

1 回答 1

1

一种使用方式GNU awk

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

编辑:

也许 in 中的字符串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
于 2012-10-09T23:18:03.000 回答