1 那些常用的 Unix 命令,你不知道的功能!-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

那些常用的 Unix 命令,你不知道的功能!

Linux爱好者 来源:YXQ 2019-08-11 10:04 次阅读

我逐渐意识到,Unix 的命令行工具可以解决一切与文字处理有关的问题。我来讲一个我遇到过的问题,以及怎样用 Unix 命令行工具解决的。

问题

我在做我的硕士论文研究。像许多统计学家一样,我需要进行许多vwin 。首先我利用一些数字的种子(以保证可复现性)来模拟了一些数据,然后在这些数据上用一个算法来估算一些东西。每次运行模拟时我都会创建一些文件,大概像下面这样:

dataset-directory/0001_data.csvdataset-directory/0001_A.csv

但有时候运行会失败。这并不是太严重,模拟失败了我只需要运行另一个模拟就好了。比如,0001 这个数据我成功地运行了算法 A。因此我想在 0001 数据上使用算法 B。但我真正需要的是跟踪哪些命令失败了。

在许多数据上运行算法 A 之后,我得到了一大堆文件,像这样:

dataset-directory/0001_data.csvdataset-directory/0001_A.csvdataset-directory/0002_data.csvdataset-directory/0002_A.csvdataset-directory/0003_data.csvdataset-directory/0003_A.csvdataset-directory/0004_data.csvdataset-directory/0005_data.csvdataset-directory/0005_A.csvdataset-directory/0006_data.csvdataset-directory/0006_A.csvdataset-directory/0007_data.csvdataset-directory/0007_A.csvdataset-directory/0008_data.csvdataset-directory/0009_data.csvdataset-directory/0009_A.csv...dataset-directory/0499_A.csv

通过观察得知算法 A 在数据 0004 和 0008 上的结果不存在。那么,怎样才能列出所有 A 没有成功的数据呢?

我当然可以手工来做,但那样很容易出错,而且很麻烦。要是能写程序完成就最好了!

解决方案

简单地来说,那些没有成功的就是从0001到0500的数字中去掉那些成功了的数字。而得到数字列表的最好命令就是 seq:

$>seq1012345678910

(如果只给出一个数字,那么默认序列从1开始。当然,seq 2 10也会按照你期待的那样工作。)

现在,如果我能获得成功运行的列表,就可以通过 seq 命令生成所有可能的数字,再交叉检查两个列表来获得想要的结果了!

许多命令行工具只完成一项工作。例如,cut 可以获得每行指定位置上的字符:

$>cattextLoremipsumdolorsitamet$>cattext|cut-c2-5oremolor

注意这里使用了所谓的“管道运算符” | 。我说过,许多工具只做一件事,而且把那件事做到最好。很方便的是这些工具可以组合使用。使用管道,左边命令的结果就会变成右边命令的输入。注意这些命令会将输入当做一系列行来处理,通常来说这非常方便。

我们可以把成功的文件名单列表利用管道输入至 grep 命令,该命令可以使用正则表达式来查找。由于所有文件都以同样长度的四个数字开始,我们可以利用正则表达式 dddd 来匹配这四个连续的数字,然后将文件末尾的 A 算法加到正则表达式中。要获得文件列表,每行一个文件,只需执行 ls。(尽管直接调用 ls 时并不会显示成每行一个文件,但放在管道中时输出就会变成这样。)

$>lsdataset-directory|grep'dddd_A.csv'0009_A.csv0001_A.csv0002_A.csv0005_A.csv0007_A.csv0003_A.csv0006_A.csv...

出于某些原因,在使用 grep 之后这里的顺序混乱了。我们可以使用 sort 命令来改正。而且由于我们只关心数字,可以使用 cut -c 1-4 来取出数字部分。

$>lsdataset-directory|grep'dddd_A.csv'|sort|cut-c1-40001000200030005000600070009...0499

这些数字跟 seq 命令的结果不太一样,因为它们前面补了零。我们可以使用一段 Python 脚本将它们转成整数。

#parse.pyimportsysforlineinsys.stdin:i=int(line)print(i)

现在将结果用管道导入这个脚本就能得到我们需要的数字:

$>lsdataset-directory|grep'dddd_A.csv'|cut-c1-4|python3parse.py1235679...499

接近目标了!现在需要找出怎样才能交叉检查这两个数字的列表。幸运的是,有个命令叫做comm,它能检查两个输入流中的公共字符。为了将上面这个命令的输出作为输入使用,我们可以将其求值后重定向,只需使用<(...)即可实现:

$>comm<(ls dataset-directory | grep 'dddd_A.csv' | cut -c 1-4 | python3 parse.py) <(seq 500)        1        2        3    4        5        6        7    8        9    10...    500

这个输出不是太好理解。阅读 comm 的手册(运行 man comm)可以发现,comm 会“产生三列的输出,分别是:只存在于 file1 的行,只存在于 file2 的行,以及存在于两个文件的行”。要去掉第一列(其实它是空的,因为没有任何数字只存在于文件列表中),可以在调用 comm 时加入参数-1。我们也不关心同时存在于两个输入中的数字,因此还要传递标志-3。

$>comm-1-3<(ls dataset-directory | grep 'dddd_A.csv' | cut -c 1-4 | python3 parse.py) <(seq 500)48...500

搞定!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4607

    浏览量

    92821
  • UNIX
    +关注

    关注

    0

    文章

    296

    浏览量

    41476

原文标题:程序员,你真的会用 Unix 命令?

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    不知道的AD功能

    不知道的AD——SmartPaste功能
    发表于 12-30 16:31

    自动焊锡机那些不知道的事

    自动焊锡机那些不知道的事
    发表于 05-11 06:08

    Miniplayer小技巧 保证有不知道

    Miniplayer小技巧 保证有不知道的 1,用电源充电完成后先别拔充电器,先按住开关别放再拔开线就不用更新歌曲库了。
    发表于 02-01 16:38 689次阅读

    玩转iPhone:可能不知道的iPhone实用技巧

    玩转iPhone:可能不知道的iPhone实用技巧 玩iPhone有段时间了吧,怎么才能让iPhone更顺手呢?在这里可以看到一些最新的iPhone小技巧
    发表于 04-07 09:22 305次阅读

    深扒:iPhone7那些不知道的事!

    和往年一样,今年的苹果旗舰如期而至,采用双旗舰设置,分别为4.7寸的iPhone7和5.5寸的iPhone7 Plus。那些升级和变化诸如升级了芯片到A10,取消了3.5mm耳机接口,Home键采用压力式设计和双摄像头等等我们就不多说了,接下来我们说一说
    发表于 11-28 08:43 792次阅读

    绝对有不知道的iOS自身小技巧!

    ​iOS本身就是一个很流畅,很人性化的系统,但是功能多,一般使用的人有些功能不知道如何使用。小编找了几点小iOS自身的使用小技巧分享给大家。
    发表于 12-19 13:42 570次阅读

    知道linux常用查看硬件设备信息命令的方法是什么?

    知道linux常用查看硬件设备信息命令的方法是什么?
    发表于 05-13 11:04 3149次阅读

    到底知不知道硬件设计是什么?

    想学习硬件电路方面的设计,但不知道怎么入手? 懵懵懂的进入硬件领域,对自己的发展和方向很迷茫? 做了一段时间硬件设计,事业发展和薪资遭遇瓶颈? 有时候必须承认,还不够优秀!甚至不知道
    的头像 发表于 05-18 11:27 9731次阅读

    关于可能不知道的printf

    可能不知道的printf
    的头像 发表于 02-05 12:28 2621次阅读
    关于<b class='flag-5'>你</b>可能<b class='flag-5'>不知道</b>的printf

    如果不知道斜拉链机头轮轴磨损怎么修,请看这里

    如果不知道斜拉链机头轮轴磨损怎么修,请看这里
    发表于 06-16 14:55 1次下载

    一些也许您还不知道的 TINA-TI 的那些资源!

    一些也许您还不知道的 TINA-TI 的那些资源!
    发表于 11-07 08:07 3次下载
    一些也许您还<b class='flag-5'>不知道</b>的 TINA-TI 的<b class='flag-5'>那些</b>资源!

    在Linux下不知道的df命令那些功能

    问题: 我知道在Linux上我可以用df命令来查看磁盘使用空间。能告诉我df命令的实际例子使我可以最大限度得利用它吗?
    的头像 发表于 12-21 10:53 954次阅读

    不知道的FPC,它的发展史竟然是这样的!

    不知道的FPC,它的发展史竟然是这样的!
    的头像 发表于 11-15 10:48 1272次阅读

    揭秘pcb是什么物质:不知道的“化学战士”

    揭秘pcb是什么物质:不知道的“化学战士”
    的头像 发表于 12-14 10:27 1035次阅读

    辊压机轴承位磨损修复不知道那些

    德赢Vwin官网 网站提供《辊压机轴承位磨损修复不知道那些事.docx》资料免费下载
    发表于 03-12 15:10 0次下载