在一个制表符分隔的文件中,它采用以下形式:
ID |整数|整数
1 12345 56789
2 11111 233323
3 43423 789798
基本上,file1.txt是制表符分隔的文件,其中第一列是编号为1-50的sql数据库的主键。其他两列只是与我们的数据集对应的数字。
然后在另一个文件中我有: 字符串|整数
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,只有在我的专栏已完美排列时才找到粘贴命令。感谢。
答案 0 :(得分: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
编辑:
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