-2
cat file1.txt
Id    leng  sal   mon
25671 34343 56565 5565
44888 56565 45554 6868
23343 23423 26226 6224
77765 88688 87464 6848
66776 23343 63463 4534

cat file2.txt
Id     sp He Ho
25671  33 45 35
34353  64 75 33
77765  56 56 67

cat output.txt
Id     leng   sal  sp He Ho
25671  34343 56565 33 45 35
77765 88688  87464 56 56 67

file1.txt と file2.txt の両方を比較し、column1 が両方のファイル (file1.txt と file2.txt) で同じである場合、別の出力 (output.txt) でレポートをマージして 1 つだけ一致させます (file1.txt の 4 番目の列を無視します)。 、出力ファイルのマージ中)。

cat file1.txt file2.txt|sort-u >output.txt を試しました。しかし、うまくいきません。join を使用した awk、トリックは大歓迎です。

4

3 に答える 3

1
awk 'NR==FNR{ s[$1] = $2 " " $3 }
     NR!=FNR{ if( $1 in s ) print $1, s[$1], $2,$3,$4}' file1.txt file2.txt
于 2012-06-29T19:06:19.910 に答える
0

これはうまくいくかもしれません(GNU sed):

cat <<\! >file1.txt
> Id    leng  sal   mon
> 25671 34343 56565 5565
> 44888 56565 45554 6868
> 23343 23423 26226 6224
> 77765 88688 87464 6848
> 66776 23343 63463 4534
> !
cat <<\! >file2.txt
> Id     sp He Ho
> 25671  33 45 35
> 34353  64 75 33
> 77765  56 56 67
> !
sed 's|^\(\S*\)\s*\(.*\)|/^\1/s/\\(\\(\\S*\\s*\\)\\{3\\}\\).*/\\1\2/p|' file2.txt
/^Id/s/\(\(\S*\s*\)\{3\}\).*/\1sp He Ho/p
/^25671/s/\(\(\S*\s*\)\{3\}\).*/\133 45 35/p
/^34353/s/\(\(\S*\s*\)\{3\}\).*/\164 75 33/p
/^77765/s/\(\(\S*\s*\)\{3\}\).*/\156 56 67/p
sed 's|^\(\S*\)\s*\(.*\)|/^\1/s/\\(\\(\\S*\\s*\\)\\{3\\}\\).*/\\1\2/p|' file2.txt |
sed -nf - file1.txt
Id    leng  sal   sp He Ho
25671 34343 56565 33 45 35
77765 88688 87464 56 56 67

説明:

必要な形式に変換file2.txtする sed スクリプトに変換file1.txtします。

于 2012-06-30T08:19:50.367 に答える
0
join -o 0 1.2 1.3 2.2 2.3 2.4 <(sort file1.txt) <(sort file2.txt) |sort -n | tr ' ' '\t'
于 2012-06-29T19:57:47.830 に答える