黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 操作系统 >> LINIX UNIX >> 正文
·没有路由密码权限时的鸽08-23·上网安全 Vista自我防范10-11
·让濒临崩溃的Windows XP10-11·有备无患,快速自制救急10-11
·要你好看!Windows看图工10-11·空间赞助网提供不同类型10-11
·讨论net.exe和net1.exe的10-10·让3389远程桌面传输更通10-10
·巧妙入侵渗透赌博站10-10·Aspx空间扫权限工具10-10
·Windows2003最新提权工具10-10·易淘乐提供100M免费全能10-10
·系统开机密码忘了不着急10-09·中意网络提供免费100M免10-09
·与众不同 Windows XP开始10-08·让桌面图标翻跟斗 在XP上10-08
·上海宽元站长资助计划-提10-08·个性化Windows XP的任务10-07
·趣盘提供3G免费网络硬盘10-07·秀山热线提供200MB免费全10-07
·一次艰辛的提权过程10-06·成功入侵IT大卖场的渗透10-06
·mysqlhack- MYSQL利用工10-06·lanker一句话PHP后门客户10-06
·WIXI提供3G免费多媒体网10-06·新人网络提供100M/ftp免10-06
·如何利用QQ带来高流量10-05·UuShare提供免费网络文件10-05
[推荐]使用Linux 文本工具简化数据的提取
      ★★★

使用Linux 文本工具简化数据的提取

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-10-4 10:29:17
 

  paste

  paste 工具可以对文件中的域进行合并。它从每个源文件中提取一行内容,并将其与另外一个源文件中的一行内容合并在一起。

  举例来说,假设文件 “fileone” 的内容如下所示:

IBM 
Global 
Services 

  另外,我们还有一个 “filetwo” 文件,其内容如下所示:

United States 
United Kingdom 
India 

  下面的命令将这两个文件的内容合并在一起,如下所示:

# paste fileone filetwo 
IBM       United States 
Global    United Kingdom 
Services  India 

  如果 fileone 中的行数比 filetwo 多,那么 paste 操作依然会继续,不过在制表符后面是一些空项。

  制表符字符是默认的分隔符,但是我们可以使用 -d 选项将其修改成任何其他值。

# paste -d", " fileone filetwo 
IBM, United States 
Global, United Kingdom 
Services, India 

  我们也可以使用 -s 选项将 fileone 的内容在一行中输出,后面加上一个回车键,然后再显示 filetwo 的内容。

# paste -s fileone filetwo 
IBM           Global            Services 
United States United Kingdom    India 

  join

  joinpaste 的一个很好的增强版本。join 只有在所要连接的文件共享某个共同的域时才会工作。

  举例来说,考虑我们上面介绍 paste 时所使用的两个文件。下面是在使用 join 对其进行合并时所发生的事情:

# join fileone filetwo 

  注意这并没有显示任何东西。join 工具必须要在所操作的文件之间找到共同的域,默认情况下,它期望这个共同的域就是第一个域。

  要了解这是如何工作的,我们可以尝试添加一些新内容。假设 fileone 现在包含以下内容:

aaaa    Jurassic Park 
bbbb    AI 
cccc    The Ring 
dddd    The Mummy 
eeee    Titanic 

  filetwo 现在包含以下内容:

aaaa    Neil    1111 
bbbb    Steven  2222 
cccc    Naomi   3333 
dddd    Brendan 4444 
eeee    Kate    5555 

  现在,再次尝试下面的命令:

# join fileone filetwo 
aaaa    Jurassic Park    Neil    1111 
bbbb    AI               Steven  2222 
cccc    The Ring         Naomi   3333 
dddd    The Mummy        Brendan 4444 
eeee    Titanic          Kate    5555 

  此时第一个域相同的地方就会被识别出来,匹配项也就进行了合并。paste 是盲目地从每个文件中提取内容并创建输出结果;而 join 则是只合并那些匹配的行,这种匹配必须非常精确。举例来说,假设您向 filetwo 文件中添加一行内容:

aaaa    Neil    1111 
bbbb    Steven  2222 
ffff    Elisha  6666 
cccc    Naomi   3333 
dddd    Brendan 4444 
eeee    Kate    5555 

  现在这个命令只会产生下面的输出结果了:

# join fileone filetwo 
aaaa    Jurassic Park   Neil     1111 
bbbb    AI              Steven   2222 

  只要这两个文件不再匹配了,就不会再执行任何操作了。第一个文件的每一行都匹配且只匹配于第二个文件相同行的默认域。如果找到匹配项,它们就会组成输出;否则就不再执行任何操作了。

  默认情况下,join 只会查找第一个域进行匹配,并输出所有列的内容;不过我们可以对这种行为进行修改。-1 选项让我们可以指定使用哪个域作为 fileone 中的匹配项, -2 选项让我们可以指定使用哪个域作为 filetwo 中的匹配项。

  举例来说,要对 fileone 的第二个域和 filetwo 的第三个域进行匹配,我们可以使用下面的语法:

# join -1 2 -2 3 fileone filetwo 

  -o 选项可以以 {file.field} 格式来指定输出结果。因此,要在匹配行上打印 fileone 的第二个域和 filetwo 的第三个域,语法为:

# join -o 1.2 -o 2.3 fileone filetwo 

  join:一个实际的例子

  在实践中可以使用 join 工具最明显的方法是从 /etc/passwd 中提取用户名和对应的主目录项,并从 /etc/group 文件中提取组名。组名在 /etc/passwd 文件中是以数字的格式出现在第四个域中的。类似地,它们在 /etc/group 文件中是在第三个域中出现的。

# join -1 4 -2 3 -o 1.1 -o 2.1 -o 1.6 -t":" /etc/passwd /etc/group 
root:root:/root 
bin:bin:/bin 
daemon:daemon:/sbin 
adm:adm:/var/adm 
lp:lp:/var/spool/lpd 
nobody:nobody:/ 
vcsa:vcsa:/dev 
rpm:rpm:/var/lib/rpm 
nscd:nscd:/ 
ident:ident:/home/ident 
netdump:netdump:/var/crash 
sshd:sshd:/var/empty/sshd 
rpc:rpc:/ 

 
文章录入:sygbox    责任编辑:sygbox 
【字体:
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886