如何快速删除Linux文件中的重复数据行

如何快速删除Linux文件中的重复数据行,第1张

用uniq,如下,将 1.txt 中 所有 "相邻" 重复行合并成一行,结果存入 2.txt

uniq 1.txt > 2.txt

如果是想将相邻重复行彻底删掉(而不是合并成一行),可以用

uniq -u 1.txt > 2.txt

linux去重命令是什么呢?

在介绍uniq命令之前,我们先来新建在下面的案例中需要用到的文件/tmp/uniq.txt,内容如下

默认情况下uniq只会检索相邻的重复数据从而去重。在/tmp/uniq.txt中虽然“onmpw web site” 有三条,但是其中一条是和其他两条不相邻的,所以只去重了一条,同理“error php function”也是这种情况。

鉴于以上的检索机制,所以uniq一般情况下要和sort命令一块儿使用。

复制代码

# sort 1.txt | uniq

alpha css web

cat linux command

error php function

hello world

onmpw web site

recruise page site

repeat no data

wello web site

复制代码

现在再看是不是所有的重复项都已经经过去重处理了。

好了,小试牛刀一把以后,下面我们开始对uniq命令的选项进行简单的介绍。

-c 统计每一行数据的重复次数

复制代码

sort 1.txt | uniq -c

1 alpha css web

1 cat linux command

2 error php function

1 hello world

3 onmpw web site

1 recruise page site

1 repeat no data

1 wello web site

复制代码

我们看 “error php function”出现了两次,“onmpw web site”出现了三次。其余的都没有重复项所以为1。

-i 忽略大小写

在1.txt中添加一行数据 “Error PHP function”

复制代码

cat 1.txt

alpha css web

cat linux command

error php function

hello world

onmpw web site

onmpw web site

wello web site

Error PHP function

recruise page site

error php function

repeat no data

onmpw web site

复制代码

复制代码

sort 1.txt | uniq –c

1 alpha css web

1 cat linux command

2 error php function

1 Error PHP function

1 hello world

3 onmpw web site

1 recruise page site

1 repeat no data

1 wello web site

复制代码

我们看结果,uniq默认是区分大小写的。使用-i可以忽略掉大小写问题

复制代码

sort 1.txt | uniq –c –i

1 alpha css web

1 cat linux command

3 error php function

1 hello world

3 onmpw web site

1 recruise page site

1 repeat no data

1 wello web site

复制代码

现在再看是不是大小写已经忽略掉了。

-u 只输出没有重复的数据

复制代码

sort 1.txt | uniq –iu

alpha css web

cat linux command

hello world

recruise page site

repeat no data

wello web site

复制代码

看到没,结果中的“error php function”和“onmpw web site”都没有被输出。

-w N 表示从第一个字符开始只检索N个字符来判重。

复制代码

sort 1.txt | uniq –iw 2

alpha css web

cat linux command

error php function

hello world

onmpw web site

recruise page site

wello web site

复制代码

这里我们让uniq只对前两个字符进行检索,recruit 和 repeat前两个字符都是re,所以这两行也被认为是重复的。

-f N 表示略过前面N个字段,从第N+1个字段开始检索重复数据。以空格符或者tab键为分隔符。

复制代码

sort 1.txt | uniq –icf 2

1 alpha css web

1 cat linux command

3 error php function

1 hello world

4 onmpw web site

1 repeat no data

1 wello web site

复制代码

我们在结果中可以看到,这是略过前面的2个字段,从第三个字段开始判重的。“recruise page site” 和 “onmpw web site”的第三个字段相同,所以被认为是相同的数据。但是我们看到,“wello web site”和“onmpw web site”不但第三个字段相同,第二个也相同。那为什么它不被计入“onmpw web site”的重复数据中呢。对于这个问题就要回到前面说的,uniq只检测相邻的数据是否是重复的。

要解决这个问题还需要在sort命令上着手。还记得sort命令的-k选项吗,没错,我们就用它来解决。

复制代码

sort –k 2 1.txt | uniq –icf 2

1 alpha css web

1 cat linux command

1 repeat no data

1 recruise page site

3 error php function

4 onmpw web site

1 hello world

复制代码

我们看,是不是解决了。

-s N表示略过前面N个字符,关于这个选项的例子我们这里就不再举了,该选项和-f N的用法差不多。只不过-f N是略过前面N个字段;-s是略过前面N个字符。

-d 只输出有重复项的第一条的数据。

sort 1.txt | uniq -idw 2

repeat no data

error php function

onmpw web site

结果只有这三条。为什么会有“repeat no data”这条数据,这里注意-w 2的应用。

-D 对于重复项全部输出

复制代码

sort 1.txt | uniq –iDw 2

repeat no data

recruise page site

error php function

error php function

Error PHP function

onmpw web site

onmpw web site

onmpw web site

复制代码

好了,关于uniq的选项的所有常用的命令已经都介绍完了。关于uniq更详细的信息可以使用命令info uniq。

Linux是公认的运行稳定、安全性较高的 *** 作系统,但是服务器硬件故障和各种意外因素都会导致Linux服务器硬盘上数据丢失。特别对于运用在商业领域中的Linux服务器,数据的安全性、完整性和灾难后的数据恢复能力是每一个Linux系统管理员最为关心的问题。Linux作为新一代网络 *** 作系统,在服务器方面的应用越来越广泛。作为专门的网络服务器,一个重要功能就是对服务器数据进行备份,以确保数据的安全。

常见的Linux数据备份方法

Linux *** 作系统中的数据备份工作是Linux系统管理员的重要工作和职责。传统的Linux服务器数据备份的方法很多,备份的手段也多种多样。常见的Linux数据备份方式仅仅是把数据通过TAR命令压缩拷贝到磁盘的其它区域中去。还有比较保险的做法是双机自动备份,不把所有数据存放在一台计算机上,否则一旦这台计算机的硬盘物理性损坏,那么一切数据将不复存在了。所以双机备份是商业服务器数据安全的基本要求。通常情况下使用的双机备份是双机定时备份文件,而不是实时的。要实现双机备份,必须先在单机上备份所有的文件,然后再把备份文件传输到其它机器上。这样可能比较麻烦,而且有不足之处。例如,这样做对于不需要备份的文件也要在网络上传输,会造成带宽的浪费。

实现备份与刻录的整合

为了弥补Linux上常见备份方法的不足,本文将讲述使用sitback软件将Linux服务器磁盘中的指定数据进行自动备份,并刻录到CDR光盘的方法,以达到数据在光盘中安全存储的目的。此方法将数据备份和光盘刻录两个步骤整合在一起,自动化程度和安全性较高,而且sitback还能实现Linux网络中不同计算机之间的数据备份。

sitback简介

sitback是一款基于开源协议开发的Unix平台下的自动备份软件。与一些 Linux开放源码软件不同,sitback开发者仅提供源代码压缩包的形式给Linux用户下载。尽管sitback没有提供安装方便的RPM格式,但是sitback的安装采用了基于GNU协议的自动安装和配置的automake/autoconf模式,使得一般的Linux系统管理员能顺利地安装调试好sitback。

sitback的获取和安装

目前sitback官方网站www.mrbean.dk提供的 sitback最高版本为0.3.1。为了能最大程度地体现sitback的最佳性能,sitback的开发者建议Linux用户不要把sitback的开发版本和Beta测试版本使用到实际的数据备份中去,以防出现意外。

安装sitback源代码压缩包可以根据以下几个简单的步骤完成:

◆建立临时解压目录 /temp;

◆把sitback压缩包拷贝到/temp目录,并使用“tar xvfz sitback-x.x.x.tar.gz”命令对sitback源代码压缩包进行解压;

◆执行./configure;

◆执行make;

◆执行make install。

通过以上几个步骤可以迅速地安装好sitback。请注意使用超级用户root身份对sitback进行安装。

编译完sitback源代码压缩包之后,接着要在用户根目录中的Home目录下创建一个.sitback目录。该目录用来存放一些数据备份和刻录时产生的临时文件,以及一些脚本文件或磁盘驱动器参数文件。

同所有通过编写脚本文件来运行的程序一样,sitback也需要Linux用户自行编写备份和刻录的脚本文件,并让Linux系统把sitback当作一个备份进程(backup-daemon)来自动执行。使用高效安全的Webmin管理系统来自动执行sitback也很方便。总之,用最少的代码编写出适合Linux系统实际情况的脚本是最为安全、高效的。

将数据刻录至光盘的条件

让sitback自动备份指定的磁盘数据,并将备份的数据直接刻录到光盘中去,必须考虑的条件主要有以下几点:

◆sitback运行的时间,即备份数据时间;

◆要备份的源目录;

◆要备份到的目的目录;

◆选择存储介质,包括磁介质、光存储介质等;

◆是否要对备份数据进行校验比较,提高备份安全性;

◆备份模式,全备份或部分数据备份;

◆备份数据还原问题。

sitback提供了很多参数供用户选择,具体参数和用法可以参考sitback源代码压缩包里的开发文档和详细的使用手册。

实例运用

实例1

假设某Linux服务器中有以下这些目录:

◆/usr/smbdata 包含大多数应用软件和用户数据文件;

◆/usr/grafik 包含有重要的图形文件。

为了备份以上两个目录数据,可以编写一个脚本文件,代码及说明如下:

ARCHIVE=/dev/st0

#定义要备份的数据

(ARCHIVE表示要备份的磁盘驱动器、文件目录,甚至主机,例如:

“backuphost:/dev/st0”、

“backup@backuphost:/dev/nrt0”、

“me@192.168.1.17:/tmp/temp_backup.tar.gz”等)

TARGET=/usr/smbdata

#要备份的目的目录

TARGET=/usr/grafik

#要备份的目的目录

COMPRESSION=YES

#备份模式为对数据进行压缩后备份

VERIFY=YES

#对备份数据进行校验

REPORTFILE=/usr/smbdata/latest_backup.txt

#产生备份报告文件

REPORTPRINTER=//penguin4/Canon

#打印机信息

SMBUSER=computer1

#SAMBA用户端计算机名

SMBPASSWD=123abc

#访问密码

VOLUMENAME=Full backup - Taastrup

TIME=10200

#备份时间,每天2:00进行备份

TIME=20200

TIME=30200

TIME=40200

TIME=50200

TIME=60200

以上是一个简单的数据自动备份脚本的样本文件。如果想使用SysV初始化,可以在/etc/rc.d/init.d/中创建一个小的脚本文件来运行 sitback。在上述脚本最后一行加入“/usr/local/bin/sitback -d data”才能使得sitback自动运行。查看每次备份的情况时,可以打开临时文件/.sitback/sitback.log,里面有sitback 运行的详细记录。

实例2

使用sitback将Linux服务器中数据自动备份、刻录两个步骤进行整合。

为了达到数据备份和光盘刻录整合的目的,需要使用以下脚本来实现。它是来自sitback官方网站的样板脚本。

# Full backup of /home/bean, excluding Images

#对/home/bean,目录进行全备份

# bean@mrbean.dk 2002

# Write the archive to my cd-writer at 0,0,0

#将备份数据在指定时间写入CDR刻录机中

# (Iomega ZIPCD 650, USB), use speed=2, so that i can 刻录机硬件参数

# do other things while the backup is cooking. Also

# use on-the-fly copy to avoid too much temporary data.

# (my machine has no problem supporting this)

#

ARCHIVE=0,0,0

SPEED=2

#Iomega ZIPCD 650, USB刻录机写入速度,

CD ON THE FLY

#写入方式

# It is a huge advantage to have the files directory available

# on the cd, not inside an archive, when restoring my

# setup, hence the type 'CDRW'

#

TYPE=CDRW

#光盘类型,CDRW可擦写光盘

# Targets... Exclude Images

TARGET=/home/bean

#目标文件目录

EXCLUDE=/home/bean/Images

#目标文件目录中不用备份的目录(即排除备份的目录)

# Various stuff. Compression and verification will automagically

# be turned off by sitback, but i do not want the warnings either,

# so i just turn it off from the beginning...

#

VERIFY=NO

#对备份数据进行校验

COMPRESSION=NO

#备份数据无需压缩

# When done, put a backup report in /home/bean/backup.log

#

REPORTFILE=/home/bean/backup.log

#产生的备份报告文件及路径

关于sitback备份数据的恢复及SSH等安全措施,此处不予举例说明。总的来说,sitback是一款不可多得的Linux *** 作系统平台中优秀的数据备份和恢复工具,使用sitback可以使得企业实现安全而高效的备份。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/8679535.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-19
下一篇2023-04-19

发表评论

登录后才能评论

评论列表(0条)

    保存