1

我实际上正在编写一个批处理脚本,我需要使用批处理代码(这是蹩脚的)、uniq、sort、sed 等删除重复的行,但它不能在此过程中对列表进行排序。有任何想法吗 ?

    sort <file> | uniq   

效果很好,但它对我已经排序的文件进行了排序。有什么想法吗?

    cat <file> | uniq

失败。

4

3 回答 3

3

如果您的文件已经排序,您可以使用 uniq 命令,如您给出的示例,即

猫 | 独特的

sort 不是 uniq 的要求,强烈建议这样做,因为它只会消除连续的重复。如果一行在第 2、3、4、8 行重复,而管道中没有排序命令,则第 2 行和第 8 行将在输出中。使用 sort 只有第 2 行将在输出中。

希望这是你要问的

于 2012-11-14T21:30:33.933 回答
2
于 2012-11-15T06:35:03.310 回答
1

如果您可以使用例如不太古老的版本bash(支持数组变量),您可以轻松地在while循环中执行此操作:

#!/bin/bash
declare -a LINES
while read; do
    for n in "${LINES[@]}"; do
        if [[ $n == $REPLY ]]; then
            continue 2
        fi
    done
    LINES=("${LINES[@]}" "$REPLY")
    echo "$REPLY"
done

如果您的文件很大,awk 或 Perl 可能会更好。

于 2012-11-14T21:47:28.820 回答