首页 > 解决方案 > Linux Bash 脚本查找并加入

问题描述

下面是我的示例文件。

使用 AccountInfo(Account) 搜索 FolderStatus(Sub-folder) 上存在的子文件夹。

AccountInfo

#server,Account,status,homefolder
vmftp01,admin01,enable,/home/admin01
vmftp01,admin02,enable,/home/admin02
vmftp01,admin03,enable,/home/admin03

FolderStatus

#account,sub-folder
admin01,/sftp/inbox
admin02,/ftp/inbox
admin02,/sftp/inbox
admin02,/as2/inbox
admin03,/ftp/inbox
admin03,/sftp/inbox

期望的输出:

/home/admin01/sftp/inbox
/home/admin02/ftp/inbox
/home/admin02/sftp/inbox
/home/admin02/as2/inbox
/home/admin03/ftp/inbox
/home/admin03/sftp/inbox

我试过:

join -t 1.2,2.2 file1 file2

有错误:

join: file2:4: is not sorted: admin02,/as2/inbox

标签: bashfilejoingrep

解决方案


首先,您的 FolderStatus 文件确实没有排序,但这只是一个问题,因为您的 join 命令行似乎不正确。

尝试

join -t , -1 2 -o 1.4,2.2 AccountInfo FolderStatus

使用 AccountInfo = f2 和 FolderStatus = f1,它以这种方式对我有用(直到可以轻松消除的逗号):

ronald@oncilla:~/tmp$ join -t , -1 2 -o 1.4,2.2 f2 f1
/home/admin01,/sftp/inbox
/home/admin02,/ftp/inbox
/home/admin02,/sftp/inbox
/home/admin02,/as2/inbox
/home/admin03,/ftp/inbox
/home/admin03,/sftp/inbox

“-t”选项指定字段分隔符。“-1 2”选项指定文件 1 中的键是第二列。“-o”标志指定输出格式


推荐阅读