使用sort -m合并文件,如果文件未预先排序,则会出错?

时间:2013-08-07 13:14:35

标签: sorting merge

需要一些帮助。

我有两个文件,

    file1.txt >
    5555555555
    1111111111
    7777777777

    file2.txt >
    0000000000
    8888888888
    2222222222
    4444444444
    3333333333

我跑的时候         $ sort -m file1.txt file2.txt > file-c.txt 输出文件-c.txt在file1和file2中合并,但它没有排序。

    file-c.txt >
    0000000000
    5555555555
    1111111111
    7777777777
    8888888888
    2222222222
    4444444444
    3333333333

当它发生时我需要一个错误,说文件(file1和file2)没有排序,并且合并在排序之前不能合并文件。因此,当我运行$ sort -m file1.txt file2.txt > file-c.txt时,我必须得到一个错误,说它无法将file1和file2合并到file-c,因为它们尚未排序。

希望你们了解我:D

1 个答案:

答案 0 :(得分:0)

如果我理解你在问什么,你可以这样做:

DIFF1=$(diff <(cat file1.txt) <(sort file1.txt))
DIFF2=$(diff <(cat file2.txt) <(sort file2.txt))
if [ "$DIFF1" != "" ]; then
echo 'file1 is not sorted'
elif [ "$DIFF2" != "" ]; then
echo 'file2 is not sorted'
else
sort -m file1.txt file2.txt
fi

这适用于Bash(以及其他shell)并执行以下操作:

  1. 将DIFF1变量设置为cat和某种file1的diff的输出(如果cat和sort相同则表示文件已排序,这将为空
  2. 以与DIFF1相同的方式设置DIFF2变量,但对于file2
  3. 做一个简单的if .. elif .. else检查并查看file1和file2是否已排序,如果有,请执行命令行排序两个
  4. 这是你在找什么?

    编辑:或者如果您的排序版本支持@twalberg,您可以这样做:

    if ! sort -c file1.txt
    then echo 'file1 is not sorted'
    elif ! sort -c file2.txt
    then echo 'file2 is not sorted'
    else
    sort -m file1.txt file2.txt
    fi