我实际上正在编写一个批处理脚本,我需要使用批处理代码(这是蹩脚的)、uniq、sort、sed 等删除重复的行,但它不能在此过程中对列表进行排序。有任何想法吗 ?
sort <file> | uniq
效果很好,但它对我已经排序的文件进行了排序。有什么想法吗?
cat <file> | uniq
失败。
我实际上正在编写一个批处理脚本,我需要使用批处理代码(这是蹩脚的)、uniq、sort、sed 等删除重复的行,但它不能在此过程中对列表进行排序。有任何想法吗 ?
sort <file> | uniq
效果很好,但它对我已经排序的文件进行了排序。有什么想法吗?
cat <file> | uniq
失败。
如果您的文件已经排序,您可以使用 uniq 命令,如您给出的示例,即
sort 不是 uniq 的要求,强烈建议这样做,因为它只会消除连续的重复。如果一行在第 2、3、4、8 行重复,而管道中没有排序命令,则第 2 行和第 8 行将在输出中。使用 sort 只有第 2 行将在输出中。
希望这是你要问的
如果您可以使用例如不太古老的版本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 可能会更好。