使用gawk提取列中带有字符串的行

布莱恩

我试图从制表符分隔的文件中提取行,如果该文件在第4列中包含某个单词。例如,如果输入文件test.txt为:

chr     8       1234    abc ; xyz
chr     8       1255    abc
chr     8       987     xyz
chr     8       5467    jxyzm

以下代码仅正确输出第一行和第三行:

gawk -F"\t" ' { if($4 ~ /\<xyz\>/) print $0 } ' test.txt >> test.out

但是,当我尝试在bash脚本中循环运行此文件时,我的输出文件为空白。我使用的代码是:

while read id
do    
    OFILE=${ODIR}/${id}.txt
    gawk -v id="$id" -F"\t" ' { if($4 ~ /\<id\>/) print $0 } ' ${IFILE} >> ${OFILE}
done < ${GFILE}

文件$ {GFILE}每行只有一个字,例如:

xyz
fg45
tre2y

我究竟做错了什么?

谢谢!

编辑为:

  1. 在输入文件中添加第四行
  2. 在命令中添加了-v id =“ $ id” ...脚本仍然不起作用!
阿努巴瓦

您可以很好地用来awk从一个文件中读取搜索模式,并在另一个文件中找到匹配项,如下所示:

awk -F '\t' '
NR == FNR {
   words[$1]
   next
}
{
   for (w in words)
      if (index($4, w)) {
         print > w ".txt"
         break
      }
}' "$GFILE" "$IFILE"

然后检查输出:

cat xyz.txt
chr     8       1234    abc ; xyz
chr     8       987     xyz

如果您真的想修复您的Shell脚本,那么这里是:

while read id; do
    awk -F '\t' -v id="$id" '$4 ~ id' "$IFILE" > "$id.txt"
done < "$GFILE"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用C#中的Regex从字符串中提取带有可选特殊字符的代码

从bash文件中提取的行中回显带有envrionment变量的字符串

在带有字符串的列中按最后3个字符选择行

Pandas-仅在根据特定条件检索的行上使用正则表达式提取带有数字/字符串的更新列

如何删除SQL Server列中带有“空字符串”的行?

使用带有 grepl 和循环的名称列表从字符串中提取名称,并将它们添加到 R 中的新列

使用.apply()带有字符串的Pandas创建列

在pandas df中提取带有子字符串的行,该子字符串包含空格

如何使用脚本从日志中解析带有空字符串的列

使用Hive中的REGEXP_EXTRACT从带有美元符号的字符串中提取2个价格

Google BigQuery 从带有 regexp_extract 的列中提取字符串 - 字符串值

检查列表中哪些列具有精确的字符串值并提取列和行

如何在pandas数据框中的列的所有行中提取字符串中的大写单词?

使用awk或gawk提取字符串的一部分

如何在Google BigQuery的URL字符串中的模式之后提取带有SYMBOLS的字符串

如何使用带有变量、字符串和新行的 printf 在 bash 中的一行中写入文件

在Pyspark中从带有字符串列表的列中获取最频繁的字符串

提取带有可选结尾模式的字符串

如何从R中带有模式的字符串中提取特定单词

使用 BeautifulSoup 从带有特定字符串的 HTML 中提取表格

如何使用带有curl命令的sed命令从Web URL中提取特定的字符串

如何使用JavaScript从带有小数的字符串中提取数字

如何使用带有 map() 的一行将字符串中的所有元音变为大写?

在每一行中创建一个带有特定字符串的新列

如何使用带有Angular的字符串数组在HTML模板中显示具有3列的表格?

筛选所有列中包含特定字符串的行(使用dplyr)

如何从带有括号的字符串中提取字符串?

Rails-从字符串中提取带有[和]的子字符串

R:从字符串中提取带有大写字母的子字符串