【问题标题】:awk to match field between two files and use conditions on matchawk 匹配两个文件之间的字段并在匹配时使用条件
【发布时间】:2016-10-15 03:25:14
【问题描述】:

我正在尝试在file2$2 中寻找$2file1 (跳过标题),如果它们匹配并且$10 中的值是> 30 和$11> 49,然后将该行打印到 output 文件。下面的awk 有语法错误,尽管shellcheck 没有返回任何内容。输入和输出都是tab-delimited。我认为以下内容很接近,但不确定出了什么问题。谢谢 :)。

awk

 awk -F'\t' -v OFS='\t' 'NR==FNR{A[$2];next}$2 in A
{if($10 >.5 OFS $11 > 49)
print ; next
' file1 file2
awk: cmd. line:2: {if($10 >.5 OFS $11 > 49)
awk: cmd. line:2:                   ^ syntax error
awk: cmd. line:3: print ; next
awk: cmd. line:3:             ^ unexpected newline or end of string

文件1

Missing in IDP but found in Reference:
2   166848646   G   A   exonic  SCN1A   68  13  16;20   0;0 17;15   0;0 0;0 0;0     c.[5139C>T]+[=] 52.94

文件2

chr2    166245425   SCN2A   AMPL5155065355  SNP Het C/T C   T   54  100   50    23  27
chr2    166848646   SCN1A   AMPL1543060606  SNP Het        G/A   G  A   52.9411764706   100 68  32  36

期望的输出

2   166848646   G   A   exonic  SCN1A   68  13  16;20   0;0 17;15   0;0 0;0 0;0     c.[5139C>T]+[=] 52.94

用新的awk编辑

awk -F'\t' -v OFS='\t' 'NR==FNR{A[$2];next}$2 in A {
if($10 >.5 OFS $11 > 49) >>> if($10 >.5 && $11 > 49)
print }
' file1 file2 > out
awk: cmd. line:2: if($10 >.5 OFS $11 > 49) >>> if($10 >.5 && $11 > 49)
awk: cmd. line:2:                    ^ syntax error

【问题讨论】:

  • 一件快事:if($10 >.5 OFS $11 > 49) >>> if($10 >.5 && $11 > 49)
  • 另外,print 之后的 next 什么也不做,因此您可以将其删除。然后你应该在结束'之前添加缺少的结束}
  • 使用新的awk 添加了编辑,但在shellcheck 未检测到错误时出现语法错误。谢谢你:)。
  • 对不起!通过“>>>”,我的意思是用另一个替换一个——我应该更明确地说明这一点。无论如何,看起来@karafka 为您提供了答案,如下所示。
  • 猜猜shellcheck 是要检查什么 - shell! awk 不是 shell,它是 awk,一种完全不同的工具和语言,您可以从 shell 或 Windows 批处理文件或任何地方调用它。阅读 Arnold Robbins 的 Effective Awk Programming,第 4 版,因为现在您只是在猜测 awk 的语法和语义,而这并不奇怪。

标签: awk


【解决方案1】:

给你...

$ awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$2]; next} 
                          ($2 in a) && $10>30 && $11>49 ' file1 file2

【讨论】:

    猜你喜欢
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 2018-07-12
    • 2022-01-08
    • 2019-05-04
    • 1970-01-01
    相关资源
    最近更新 更多