【发布时间】:2016-10-15 03:25:14
【问题描述】:
我正在尝试在file2 的$2 中寻找$2 的file1 (跳过标题),如果它们匹配并且$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