需要有关awk命令不匹配的帮助';

需要有关awk命令不匹配的帮助';,awk,csh,Awk,Csh,这是awk命令 awk ' BEGIN { row=1 while ( getline < "routingTB.txt" > 0 ) { if( row==1 ) { col_id=$1; for( i=2; i<=NF; i++ ) q_id[i]=$i } else if( row==2 ) for( i=2; i<=NF; i++ ) { s[q_id[i]]=$i; s_id[q_id[i]]=$1 }

这是awk命令

awk '
BEGIN {
  row=1
  while ( getline < "routingTB.txt" > 0 )
  {
     if( row==1 )      { col_id=$1; for( i=2; i<=NF; i++ ) q_id[i]=$i }
     else if( row==2 )
     for( i=2; i<=NF; i++ ) { s[q_id[i]]=$i; s_id[q_id[i]]=$1 }
     else
     for( i=2; i<=NF; i++ )
     if( $i<s[q_id[i]] ) { s_id[q_id[i]]=$1; s[q_id[i]]=$i }
   row++
 }
 }
 {  print $1, (NR>1 ? s_id[$1] : col_id) , $3 } ' query.txt
文件2:

solution q1 q2 q3 q4 q5
s1 3425 1346 758 2245 928
s2 145 243 2983 1890 899
s3 333 209 1779 230 902
期望输出:

query solution attributes
q1 s2 a1,a2
q2 s3 a1,a4,a5
q5 s2 a1
错误日志显示“不匹配”


我不知道发生了什么事。我只有两个单引号。我需要帮助。谢谢

您需要在脚本顶部添加一行shebang

#!/bin/sh #!/垃圾箱/垃圾箱
该错误是csh不知道如何解析输入的结果。停止使用csh。

脚本顶部需要一行shebang

#!/bin/sh #!/垃圾箱/垃圾箱
该错误是csh不知道如何解析输入的结果。停止使用csh。

最好将脚本放在文件中,以便更容易理解

没有任何更改,我只是将您的脚本放在一个文件中并缩进它

bash-3.2$ cat sample.awk
#!/bin/awk -f
BEGIN {
        row=1
        while ( getline < "routingTB.txt" > 0 )   {
                if( row==1 )      {
                        col_id=$1;
                        for( i=2; i<=NF; i++ ) q_id[i]=$i
                }
                else if( row==2 )
                        for( i=2; i<=NF; i++ )
                        {
                                s[q_id[i]]=$i; s_id[q_id[i]]=$1
                        }
                else  for( i=2; i<=NF; i++ )
                        if( $i<s[q_id[i]] ) { s_id[q_id[i]]=$1; s[q_id[i]]=$i }
                row++
        }
}
{
        print $1, (NR>1 ? s_id[$1] : col_id) , $3
}
bash-3.2$
bash-3.2$ awk -f sample.awk query.txt
query solution attributes
q1 s2 a1,a2
q2 s3 a1,a4,a5
q5 s2 a1

最好将脚本放在一个文件中,这样更容易理解

没有任何更改,我只是将您的脚本放在一个文件中并缩进它

bash-3.2$ cat sample.awk
#!/bin/awk -f
BEGIN {
        row=1
        while ( getline < "routingTB.txt" > 0 )   {
                if( row==1 )      {
                        col_id=$1;
                        for( i=2; i<=NF; i++ ) q_id[i]=$i
                }
                else if( row==2 )
                        for( i=2; i<=NF; i++ )
                        {
                                s[q_id[i]]=$i; s_id[q_id[i]]=$1
                        }
                else  for( i=2; i<=NF; i++ )
                        if( $i<s[q_id[i]] ) { s_id[q_id[i]]=$1; s[q_id[i]]=$i }
                row++
        }
}
{
        print $1, (NR>1 ? s_id[$1] : col_id) , $3
}
bash-3.2$
bash-3.2$ awk -f sample.awk query.txt
query solution attributes
q1 s2 a1,a2
q2 s3 a1,a4,a5
q5 s2 a1