微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Bashjoin命令

Infile1:

1 a 3 c 4 d 6 f

Infile2:

1 a 2 b 5 e 6 f 7 g 8 h

如何使用unix join命令join这些文件以获得此输出

1 aa 2 b 3 c 4 d 5 e 6 ff 7 g 8 h

Dogbanes答案工作,但…当我申请dogbanes答案在这文件

Perlreplace从脚本中产生空文件,而不是从bash中产生

通过SSH启动一个长时间运行的程序

如何删除〜而不删除我的主目录?

shell – 创build附加内容的文本文件 – 使用猫

在Linux中使用笔记本电脑的光线传感器

27 27 28 22 29 37 30 15 31 21 32 13 33 18 34 24

和这个:

27 7 28 13 29 6 30 12 31 30 32 5 33 10 34 28

他们不join:

27 27 27 7 28 13 28 22 29 37 29 6 30 12 30 15 31 21 31 30 32 13 32 5 33 10 33 18 34 24 34 28

第二种情况是制表符分隔,所以我用-t t

使用grep来查找dynamic文本

xmlstarlet XPathexpression式select单个结果而不是多个

[:关于Cygwin Shell脚本的参数太多

合并sorting的文件而不知道文件

recursion地查找目录文件数量

首先sort这两个文件。 然后使用join加入这两个文件的第一个字段。 你也需要通过sed管道输出,如果你想删除的空间,从而将aa转换为aa 。 如下所示:

$ join -t " " -1 1 -2 1 -a 1 -a 2 <(sort file1) <(sort file2) | sed 's/ ([az]) / 1/g' 1 aa 2 b 3 c 4 d 5 e 6 ff 7 g 8 h

为我工作(差不多)。 您应该为制表符指定-t $'t' ,而不仅仅是-t t 。 除非在$''引号中,否则Bash不会解释t 。

join -t $'t' -o 1.2,2.2 <(echo $'27t27 28t22 29t37 30t15 31t21 32t13 33t18 34t24' | sort) <(echo $'27t7 28t13 29t6 30t12 31t30 32t5 33t10 34t28' | sort) 27 7 22 13 37 6 15 12 21 30 13 5 18 10 24 28

这应该适用于你的两种情况:

awk 'NR==FNR{a[$1]=$2;next;} {a[$1]=($1 in a)?a[$1]$2:$2}END{for(x in a)print x,a[x]}' f1 f2|sort

案例一输出

1 aa 2 b 3 c 4 d 5 e 6 ff 7 g 8 h

情况二的输出

27 277 28 2213 29 376 30 1512 31 2130 32 135 33 1810 34 2428

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐