-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,如果两个文件(file1.txt和file2.txt)中的column1相同,则单独输出(output.txt)中的报告仅通过合并匹配一个(忽略file1.txt中的第4列,同时合并输出文件)。

我试过 cat file1.txt file2.txt|sort-u >output.txt。但它不起作用。任何 awk,使用 join 的技巧都值得赞赏。

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 回答