AWK - 如何获得它们之间相等的值?如果... $1== $1?

AWK - How can I get the values that it equal among them? if ... $1== $1?

我正在处理 DNA 序列列表。我想获得所有同名的序列($1)。我正在考虑使用 if ( == "")。但这不起作用。

result_file:

name1 number1 number2 sequenceofname1
name1 number3 number4 sequenceofname1

脚本:

awk '{if ( == "") printf("%s_%s_%s \t%s\n", ,,,);}' <result_file >file.txt

如何将 传递给我的 awk 命令?

你可以使用 -v 选项

awk -v name="name1" '{
  if ( == name) printf("%s_%s_%s \t%s\n", ,,,);
}' result_file > file.txt

或者,如果此语句在脚本中

awk -v name="" '{
  if ( == name) printf("%s_%s_%s \t%s\n", ,,,);
}' result_file > file.txt

-v var=val,在程序开始执行之前,将值val赋给变量var。此类变量值可用于 AWK 程序的 BEGIN 块。

如果我没理解错的话,您想使用 shell 脚本中的 </code> 作为其中 <code>awk 命令的参数。

在这种情况下,您不想引用要扩展的 </code>,而是引用 <code>awk 命令的其余部分。一种可能是双引号命令:

awk "{if ($1 == \"\") printf(\"%s_%s_%s \t%s\n\", $1,$2,$3,$4);}"

管理所有反斜杠会变得很困难,因此您可能更喜欢将大部分命令单引号,但将要扩展的部分双引号:

awk '{if ( == "'""'") printf("%s_%s_%s \t%s\n", ,,,);}'

读起来有点棘手 - 关键位分为 '...( == "' "" '")...'。所以有一个双引号是 Awk 命令的一部分,还有一个用于 shell,以将 </code> 保持在一个片段中。</p> <p>哦,不需要调用 <code>cat - 只需提供文件作为输入:

awk ...  <result_file >file.txt