我实际上正在编写一个批处理脚本,我需要使用批处理代码(这是跛脚),uniq,sort,sed等删除重复的行,但它不能在此过程中排序列表。有什么想法吗?
sort <file> | uniq
效果很好,但它对我已经排序的文件进行排序。任何想法?
cat <file> | uniq
失败。
答案 0 :(得分:2)
如果您的文件已经排序,您可以使用uniq命令,例如,
sort不是要求,强烈建议它,因为它只消除连续的重复。如果一行在行号2,3,4,8上重复,管道中没有sort命令,则行2和8将在输出中。对于排序,只有第2行将出现在输出中。
希望这就是你所要求的
答案 1 :(得分: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可能会更好。
答案 2 :(得分:1)
下面的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(看起来像个空格)。
请测试程序并报告结果。
安东尼奥