[英]How to find lines using patterns in a file in UNIX
我正在尝试使用具有大约5000个模式(以行隔开)的.txt文件来搜索18000行的另一个文件以查找任何匹配项。 到目前为止,我已经尝试了可以在互联网上找到的所有形式的grep和awk,但仍无法正常工作,因此我感到非常困惑。
这是每个文件的一些文字。
Pattern.txt
rs2622590
rs925489
rs2798334
rs6801957
rs6801957
rs13137008
rs3807989
rs10850409
rs2798269
rs549182
没有多余的空间或任何东西。
File.txt
snpid hg18chr bp a1 a2 zscore pval CEUmaf
rs3131972 1 742584 A G 0.289 0.7726 .
rs3131969 1 744045 A G 0.393 0.6946 .
rs3131967 1 744197 T C 0.443 0.658 .
rs1048488 1 750775 T C -0.289 0.7726 .
rs12562034 1 758311 A G -1.552 0.1207 0.09167
rs4040617 1 769185 A G -0.414 0.6786 0.875
rs4970383 1 828418 A C 0.214 0.8303 .
rs4475691 1 836671 T C -0.604 0.5461 .
rs1806509 1 843817 A C -0.262 0.7933 .
file.txt是直接从med目录下载的。
我是UNIX的新手,所以任何帮助都将是惊人的!
抱歉编辑:我绝对尝试过您推荐的每件事,结果是空白。 我是否可能在文本文件中缺少语法问题或其他内容?
PPS我知道有一些匹配项,因为每个抓取项都可以完成。 我将把这个问题移到unix.stackexchange。 谢谢您的回答,伙计们,我会全力以赴。
问题已解决:我显然在使用DOS支架。 我以前不知道这一点,所以谢谢所有回答的人。 对于遇到此问题的未来用户,以下是可行的解决方案:
dos2unix *
awk'NR == FNR {p [$ 0]; next} p中的$ 1'Patterns.txt File.txt> Output.txt
您可以在此处使用grep -Fw
:
grep -Fw -f Pattern.txt File.txt
使用的选项有:
-F
固定字符串搜索以将输入作为非正则表达式 -w
仅匹配完整单词 -f file
-从文件读取模式 idk是否是您想要的,但这将打印File.txt中的每一行,其第一字段等于Patterns.txt中的字符串:
awk 'NR==FNR{p[$0];next} $1 in p' Patterns.txt File.txt
如果那不是您想要的,请告诉我们您想要的。 如果这是您想要的但没有产生预期的输出,则您的一个或两个文件都包含在Windows中创建的控制字符,因此请首先对它们运行dos2unix
或类似命令。
使用Shell脚本读取包含模式的文件的每一行,然后fgrep它。
#!/bin/bash
FILENAME=$1
awk '{kount++;print $0}' $FILENAME | fgrep -f - PATTERNFILE.txt
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.