Linux 拨号vps windows公众号手机端

在Ubuntu 18.04系统中,uniq命令主要用于从文本文件中删除相邻的重复行。但是,如果你想删除整个文件中的重复行,那么uniq命令可能并不适用,因为它只处理相邻的重复行。对于删除整个文件中的重复行,你可能需要使用其他工具或方法。

lewis 4年前 (2021-01-14) 阅读数 7 #网络运维

以下是一些可能的方法:

1、使用sort和uniq命令

你可以使用sort命令将文件内容排序,然后使用uniq命令删除相邻的重复行,这不会删除整个文件中的所有重复行。

sort filename | uniq > newfile

2、使用awk命令

awk是一个强大的文本处理工具,可以用来删除文件中的重复行,以下是一个使用awk删除重复行的示例:

awk '!seen[$0]++' filename > newfile

3、使用Python脚本

如果你熟悉Python,你可以编写一个简单的脚本来删除文件中的重复行,以下是一个示例脚本:

def remove_duplicates(filename):
    with open(filename, 'r') as file:
        lines = file.readlines()
    unique_lines = []
    for line in lines:
        if line not in unique_lines:
            unique_lines.append(line)
    with open(filename, 'w') as file:
        for line in unique_lines:
            file.write(line)
remove_duplicates('filename')

这个脚本首先读取文件的所有行,并将它们存储在一个列表中,它遍历这个列表,只保留第一次出现的行,并将它们写回文件。

4、使用sed命令

sed是一个流编辑器,也可以用来删除文件中的重复行,以下是一个使用sed删除重复行的示例:

sed '$!N; /^\(.*\)\n\1$/!P; D' filename > newfile

这个命令使用了一个模式匹配和替换的技巧,它首先读取两行文本(一行在模式空间中,另一行在缓冲区中),然后检查这两行是否相同,如果它们不同,它就打印模式空间中的第一行,然后重复这个过程,如果它们相同,它就跳过它们,这样,它就会保留每个唯一的连续对的第一行,并跳过其余的行。

5、使用Perl脚本

你还可以使用Perl脚本来删除文件中的重复行,以下是一个示例脚本:

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use Fcntl ':flock';;
my %hash;
open(my $fh, '<', 'filename') or die "Could not open file 'filename' $!";
flock($fh, LOCK_SH) or die "Could not get shared lock $!";
while (my $row = <$fh>) {
    chomp $row; 
    $hash{$row}++; 
} 
close($fh); 
open($fh, '>', 'filename') or die "Could not open file 'filename' $!"; 
flock($fh, LOCK_EX) or die "Could not get exclusive lock $!"; 
foreach (keys %hash) { 
    print $fh "$_ \n"; 
} 
close($fh); 

这个脚本首先打开文件并读取所有的行,然后将每一行存储在一个哈希表中,它再次打开文件并遍历哈希表中的所有键,对于每个键,它都将其写入文件中,这样,它就会删除所有的重复行。

版权声明

本文仅代表作者观点,不代表米安网络立场。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门