繁体   English   中英

如何在UNIX中使用文件中的模式查找行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM