我在同一列上加入了两个文件。加入后,我只希望输出是原始顺序中仅来自其中一个文件的所有列。例如:

cat file1.tsv
1       a       ant
2       b       bat
3       c       cat
8       d       dog
9       e       eel

cat file2.tsv
1       I
2       II
3       III
4       IV
5       V

join -1 1 -2 1 file1.tsv file2.tsv -t $'\t' -o 1.1,1.2,1.3
1       a       ant
2       b       bat
3       c       cat

我知道我使用-o 1.1,1.2..表示法,但是我的文件有两打以上的列。是否可以使用一些通配符来表示-o 1.*或其他内容?

最佳答案

我不知道格式字符串中的通配符。

从您想要的输出中,我认为您可以这样实现,而无需指定所有枚举:

grep -f <(awk '{print $1}' file2.tsv ) file1.tsv
1       a       ant
2       b       bat
3       c       cat

或作为纯awk解决方案:
awk '{if(NR==FNR){a[$1]++}else{if($1 in a){print}}}' file2.tsv file1.tsv
1       a       ant
2       b       bat
3       c       cat

关于linux - unix join命令返回一个文件中的所有列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53602671/

10-11 16:57