bash:合并和排序文件

时间:2013-11-23 20:45:56

标签: bash sorting

例如我有2个文件

First.txt

John 5
Kate 3
Bob 1

Second.txt

Bob 4
John 3
Kate 2

在这里我不知道该怎么做,创建第三个文件,看起来像这样:

John 3 5
Kate 2 3
Bob 1 4

我正在尝试使用'awk','sort',但无法找到解决方案。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

join实用程序在这里很有用,但它希望对文件的内容进行排序:

$ join <(sort first.txt) <(sort second.txt)
Bob 1 4
John 5 3
Kate 3 2

我知道它与您的示例输出不完全相同,但也许足以满足您的目的?

<强>更新

因此,您似乎想要对每行的值进行排序,因此,我想,您希望John 5 3而不是John 3 5。一种方法:

join <(sort a) <(sort b) | awk '{ if ($2 < $3) print $0; else print $1, $3, $2 }'

答案 1 :(得分:0)

#! /bin/bash

SF=""
SL=""
cat f.txt s.txt|sort|while read L; do
    #echo $L
    declare -a A=($L)
    if [ $SF == ${A[0]} ]; then
        echo $SL ${A[1]}
    else
        SF=${A[0]}
        SL=$L
    fi
done