我实际上是在编写一个批处理脚本,我需要使用批处理代码(这是蹩脚的),uniq,排序,sed等删除重复的行,但它不能排序列表中的过程。有任何想法吗 ?使用uniq命令(排序)
sort <file> | uniq
工程很好,但它排序我已经排序的文件。任何ides?
cat <file> | uniq
失败。
我实际上是在编写一个批处理脚本,我需要使用批处理代码(这是蹩脚的),uniq,排序,sed等删除重复的行,但它不能排序列表中的过程。有任何想法吗 ?使用uniq命令(排序)
sort <file> | uniq
工程很好,但它排序我已经排序的文件。任何ides?
cat <file> | uniq
失败。
如果你的文件已经被排序,你可以为你给的,即
排序不是要求对于uniq,强烈建议,因为它只消除连续重复。如果一条生产线在2,3,4,8行上重复,在管道中没有排序命令,则生产线2和8将在输出中。排序只有第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很可能是更好的。
我在批处理文件中使用这个.. –
下的Windows/DOS批处理文件做你需要什么(我希望...)
@echo off
setlocal DisableDelayedExpansion
for /F "eol=⌂ delims=" %%a in (thefile.txt) do (
if not defined line["%%a"] (
set line["%%a"]=defined
echo %%a
)
)
注意,在eol=⌂
部分字符必须是任何字符。该文件中不存在;我建议你使用Ascii-127(如我的代码)或Ascii-255(看起来像一个空间)。
请测试程序并报告结果。
Antonio
我将你的代码完全复制到了我的代码中,而且我越来越......“îédelims =”此时意外。“ –
@MikeQ:这很奇怪,代码在我的Win-XP电脑上工作,没有任何问题......无论如何,归咎于出错后的字符位于'eol ='之后,您可以通过其他字符来修改它,但不会出现在文件中或者如果文件中没有以分号开头的行,请彻底删除'eol = X'选项。请报告结果... – Aacini
我会接受它,我沿着不同的方向前进。 –
因此它不起作用。 –
你为什么说这不起作用?你说文件已经“排序”,所以你不需要另一个排序命令。 whjne你运行命令“cat file | uniq”输出中的内容告诉你它没有工作?如果您看到一行或多行的倍数,则意味着您的文件不像您想象的那样已被排序*。其他任何失败?你需要提供一个例子 – MelBurslan