0

1つのタブ区切りファイルでは、次の形式を取ります。

ID | 整数| 整数

1   12345    56789
2   11111    233323
3   43423    789798

基本的に、file1.txtはタブ区切りファイルであり、最初の列は1〜50の番号が付けられたSQLデータベースの主キーです。他の2つの列は、データセットに対応する単なる数値です。

次に、別のファイルに次のように表示されます。整数

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

One way using 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

Results:

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

Edit:

Perhaps the string in file2.txt could contain many non-digit characters. If this is the case, then try the following:

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

Results:

1   12345   56789   234234
2   11111   233323  987987
3   43423   789798  234234
于 2012-10-09T23:18:03.000 に答える