linux - unix join命令返回一个文件中的所有列

标签 linux unix join

我有两个文件要加入一栏。加入后,我只想输出所有列,按原始顺序,仅来自一个文件。例如:

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/

相关文章:

mysql - 加入、分组、排序

javascript - 添加行时阻止表行会添加到每一行上

java - Eclipse 中的平台特定代码

unix - psql :ERROR: syntax error at or near "" LINE 1: 

linux - 仅当仅使用 sed 有 4 个单词时才将第一个单词与自身交换 3 次

unix - 可以在终端中突出显示制表符吗?

bash - crontab 不会自动运行

MYSQL连接拼图: inner and left join at the same time

linux - Linux 上的 pthread_mutex_timedlock

linux - 如何用 Shell 脚本替换 .txt 文件中未确定位置的字符串?