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

AWK-如何获得它们之间相等的值?如果$1== $1?,awk,escaping,variable-expansion,Awk,Escaping,Variable Expansion,我正在处理一系列的DNA序列。我想得到所有同名的序列($1)。我正在考虑使用if($1==“$1”)。但这是行不通的 结果文件: 名称1编号1编号2序列名称1 名称1编号3编号4名称的顺序1 脚本: awk'{if($1==“$1”)printf(“%s\%s\%s\t%s\n”,$1,$2,$3,$4);}file.txt 如何将$1传递给我的awk命令?您可以使用-v选项 awk -v name="name1" '{ if ($1 == name) printf("%s_%s_%s \

我正在处理一系列的DNA序列。我想得到所有同名的序列($1)。我正在考虑使用
if($1==“$1”)
。但这是行不通的

结果文件: 名称1编号1编号2序列名称1 名称1编号3编号4名称的顺序1 脚本:
awk'{if($1==“$1”)printf(“%s\%s\%s\t%s\n”,$1,$2,$3,$4);}file.txt
如何将
$1
传递给我的awk命令?

您可以使用-v选项

awk -v name="name1" '{
  if ($1 == name) printf("%s_%s_%s \t%s\n", $1,$2,$3,$4);
}' result_file > file.txt
或者,如果此语句在脚本中

awk -v name="$1" '{
  if ($1 == name) printf("%s_%s_%s \t%s\n", $1,$2,$3,$4);
}' result_file > file.txt
-v var=val,在程序开始执行之前,将值val赋给变量var。这些变量值可用于AWK程序的BEGIN块。

您可以使用-v选项

awk -v name="name1" '{
  if ($1 == name) printf("%s_%s_%s \t%s\n", $1,$2,$3,$4);
}' result_file > file.txt
或者,如果此语句在脚本中

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

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

如果我理解正确,您希望使用shell脚本中的
$1
作为其中的
AWK
命令的参数

在这种情况下,您不想引用要展开的
$1
,而是引用
awk
命令的其余部分。一种可能是双引号引用该命令:

awk "{if (\$1 == \"$1\") printf(\"%s_%s_%s \\t%s\\n\", \$1,\$2,\$3,\$4);}"
管理所有反斜杠可能会变得很困难,因此您可能更喜欢对命令的大部分内容使用单引号,而对要展开的部分使用双引号:

awk '{if ($1 == "'"$1"'") printf("%s_%s_%s \t%s\n", $1,$2,$3,$4);}'
读起来有点棘手-关键位被划分为
“…($1==”
“$1”
”)…”
。因此,有一个双引号是Awk命令的一部分,还有一个是用于shell的,用于将
$1
保存在一块中

哦,无需调用
cat
——只需提供文件作为输入:

awk ...  <result_file >file.txt
awk。。。file.txt

如果我理解正确,您希望使用shell脚本中的
$1
作为其中
awk
命令的参数

在这种情况下,您不想引用要展开的
$1
,而是引用
awk
命令的其余部分。一种可能是双引号引用该命令:

awk "{if (\$1 == \"$1\") printf(\"%s_%s_%s \\t%s\\n\", \$1,\$2,\$3,\$4);}"
管理所有反斜杠可能会变得很困难,因此您可能更喜欢对命令的大部分内容使用单引号,而对要展开的部分使用双引号:

awk '{if ($1 == "'"$1"'") printf("%s_%s_%s \t%s\n", $1,$2,$3,$4);}'
读起来有点棘手-关键位被划分为
“…($1==”
“$1”
”)…”
。因此,有一个双引号是Awk命令的一部分,还有一个是用于shell的,用于将
$1
保存在一块中

哦,无需调用
cat
——只需提供文件作为输入:

awk ...  <result_file >file.txt
awk。。。file.txt
$1==$1
将始终为真,因为它是一个标识。您需要存储要匹配的
$1
的值,并将其与每行的
$1
值进行比较。
$1==$1
将始终为真,因为它是一个标识。您需要存储要匹配的
$1
的值,并将其与每行的
$1
值进行比较。1)
-v name=“$1”
更好。2). 无用的cat1)
-v name=“$1”
更好。2). 无用的猫