【发布时间】:2020-07-29 15:21:17
【问题描述】:
我有一个名为 samples.list 的文件,其中包含示例 ID。我的目录中有相同的文件,我想与我的 sample.list 进行模式匹配并获得不匹配的 sample.list 的输出。
samples.list
SRR1369385
SRR1352799
SRR1377262
SRR1400622
ls -lh
-rw-rw----+ 1 gen dbgap_6109 2.2G Jul 29 02:44 SRR1369385_1.fastq.gz
-rw-rw----+ 1 gen dbgap_6109 2.2G Jul 29 02:44 SRR1369385_2.fastq.gz
-rw-rw----+ 1 gen dbgap_6109 1.2G Jul 29 03:34 SRR1352799_1.fastq.gz
-rw-rw----+ 1 gen dbgap_6109 1.2G Jul 29 03:34 SRR1352799_2.fastq.gz
-rw-rw----+ 1 gen tnt_pipeli 2.2G Jul 29 01:44 sometxt.txt
我想要的输出(与目录中文件名不匹配的样本):
SRR1377262
SRR1400622
我试过的代码:
grep -oFf `cat samples.list` ls -lh | grep -vFf - `cat samples.list`
如果有人能指导我完成解决方案,我将不胜感激。
【问题讨论】:
-
@KamilCuk 我试过了,但是不行: grep -oFf `cat samples.list` $(ls -1q | tr " " "?") | grep -vFf - `cat samples.list`
-
不解析ls。忘记 ls 的存在。
ls用于在终端中打印漂亮的文件。如果您在脚本中,请不要使用ls。您正在尝试的行grep -oFf cat samples.list $(ls -1q | tr " " "?") | grep -vFf - cat samples.list意义不大,我建议您重新阅读相关的手册页。 :/我建议,不要“猜测”编程,而是先阅读然后尝试。 -
在 SRR*.fastq.gz 文件所在目录运行
join -v2 <(f=(*_*.fastq.gz); IFS=$'\n'; echo "${f[*]%%_*}" | uniq) <(sort -u /path/to/samples.list)。