这是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
错误日志说“不匹配”。
我不知道发生了什么。我只有两个单引号。需要帮忙。感谢
答案 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