需要帮助awk命令无与伦比'

时间:2011-12-15 19:30:45

标签: 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 }
     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

此命令用于执行以下操作

我有两个文件 文件1:

query times attributes
q1 345 a1,a2
q2 547 a1,a4,a5
q5 967 a1

file2的:

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

错误日志说“不匹配”。

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

2 个答案:

答案 0 :(得分:3)

你需要在剧本顶部设置一个shebang线。

#!/bin/sh

错误是csh不知道如何解析输入的结果。停止使用csh。

答案 1 :(得分:0)

将脚本放在文件中以便更容易理解总是一个好主意。

没有改变,我只是将你的脚本放在一个文件中并缩进

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