Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash shell脚本中的Awk错误_Bash_Shell_Unix_Awk - Fatal编程技术网

bash shell脚本中的Awk错误

bash shell脚本中的Awk错误,bash,shell,unix,awk,Bash,Shell,Unix,Awk,我正在尝试根据另一个文件的顺序对一个两列文件进行排序。使用以下命令: awk 'FNR == NR {lineno[$1] = NR; next} {print lineno[$1], $0;}' associativity4Way_cacheSize32KB_replacementPolicy1.outs associativity4Way_cacheSize32KB_replacementPolicy2.outs | sort -k 1,1n | cut -d " " -f

我正在尝试根据另一个文件的顺序对一个两列文件进行排序。使用以下命令:

  awk  'FNR == NR {lineno[$1] = NR; next} {print lineno[$1], $0;}'  associativity4Way_cacheSize32KB_replacementPolicy1.outs  associativity4Way_cacheSize32KB_replacementPolicy2.outs   | sort -k  1,1n  | cut -d " " -f2- > sorted
当我在shell外部使用AWK命令时,它工作得非常好。下面是我的文件的标题内容和输出:

这是“associativity4Way_cacheSize32KB_replacementPolicy2.outs”的负责人

这是“Associativity 4Way_cacheSize32KB_replacementPolicy1.outs”

如我所愿,输出排序完美:

SHORT_SERVER-2.bt9.trace.gz_a4_b64_c32  28.559002
SHORT_SERVER-2.bt9.trace.gz_a4_b64_c32  29.068284
SHORT_SERVER-2.bt9.trace.gz_a4_b64_c32  29.100611
SHORT_SERVER-2.bt9.trace.gz_a4_b64_c32  29.869599
SHORT_MOBILE-20.bt9.trace.gz_a4_b64_c32 20.193713
SHORT_MOBILE-20.bt9.trace.gz_a4_b64_c32 20.256246
SHORT_MOBILE-20.bt9.trace.gz_a4_b64_c32 21.332859
...
当我尝试将awk命令放置在bash脚本中以便能够对其他文件执行此操作时,会出现问题:

set lru = "associativity${a}Way_cacheSize${c}KB_replacementPolicy1.outs"


set policy = "associativity${a}Way_cacheSize${c}KB_replacementPolicy${r}.outs"


awk  "FNR == NR {lineno["$policy"] = NR; next} {print lineno["$policy"], "$lru";}" "$lru" "$policy" | sort -k 1,1n  | cut -d " " -f2- > "${policy}_sorted"
这是我得到的错误:

awk: cmd. line:1: FNR == NR {lineno[associativity4Way_cacheSize32KB_replacementPolicy3.outs] = NR; next} {print lineno[associativity4Way_cacheSize32KB_replacementPolicy3.outs], associativity4Way_cacheSize32KB_replacementPolicy1.outs;}
awk: cmd. line:1:                                                                                                                                                                                                                  ^ syntax error
我也尝试过这个方法(这里有一个答案),但是输出不正确。它正在输出文件中多次打印“lru”文件的名称

set lru = "associativity${a}Way_cacheSize${c}KB_replacementPolicy1.outs"
            set policy = "associativity${a}Way_cacheSize${c}KB_replacementPolicy${r}.outs"
            awk -v policy="$policy" -v lru="$lru" 'FNR == NR {lineno[policy] = NR; next} {print lineno[policy], lru}' "$lru" "$policy"  | sort -k 1,1n  | cut -d ' ' -f2- > "${policy}_sorted"


 associativity8Way_cacheSize64KB_replacementPolicy1.outs
associativity8Way_cacheSize64KB_replacementPolicy1.outs
associativity8Way_cacheSize64KB_replacementPolicy1.outs
associativity8Way_cacheSize64KB_replacementPolicy1.outs
associativity8Way_cacheSize64KB_replacementPolicy1.outs
associativity8Way_cacheSize64KB_replacementPolicy1.outs
associativity8Way_cacheSize64KB_replacementPolicy1.outs
associativity8Way_cacheSize64KB_replacementPolicy1.outs
associativity8Way_cacheSize64KB_replacementPolicy1.outs
associativity8Way_cacheSize64KB_replacementPolicy1.outs
有人能告诉我哪里错了吗?

不要用双引号括起任何脚本(awk sed,无论什么),因为它只会引入复杂性和脆弱性

更改此项:

awk "FNR == NR {lineno["$policy"] = NR; next} {print lineno["$policy"], "$lru";}" "$lru" "$policy"
为此:

awk -v policy="$policy" -v lru="$lru" 'FNR == NR {lineno[policy] = NR; next} {print lineno[policy], lru}' "$lru" "$policy"
看看情况如何。获取Arnold Robbins的《有效的Awk编程》,第四版,开始学习Awk。

不要将任何脚本(Awk sed,无论什么)用双引号括起来,因为它只会引入复杂性和脆弱性

更改此项:

awk "FNR == NR {lineno["$policy"] = NR; next} {print lineno["$policy"], "$lru";}" "$lru" "$policy"
为此:

awk -v policy="$policy" -v lru="$lru" 'FNR == NR {lineno[policy] = NR; next} {print lineno[policy], lru}' "$lru" "$policy"

看看情况如何。获取Arnold Robbins的《有效的Awk编程》第四版,开始学习Awk。

您是否尝试设置文件的完整路径?您的问题使用编辑器
{}
按钮正确格式化代码,以便我们了解您的代码的真实外观。在awk脚本中,空格很重要。@James:是的,我也尝试了完整的路径。还是相同的问题。您是否尝试设置文件的完整路径?您的问题使用编辑器
{}
按钮正确格式化代码,以便我们了解您的代码的真实外观。在awk脚本中,空格很重要。@James:是的,我也尝试了完整的路径。仍然是相同的问题。谢谢,此错误已解决。但是输出是如此奇怪。现在它正在输出文件中打印
lru
文件的名称,而不是我的数据set lru=“associativity${a}Way\u cacheSize${c}KB\u replacementPolicy1.out”set policy=“associativity${a}Way\u cacheSize${c}KB\u replacementPolicy${r}.out”awk-v policy=“$policy”-v lru=“$lru FNR==NR{lineno[policy]=NR;next}{print lineno[policy],lru}'$lru policy''''sort-k1,n>cut 1241d'-f2-”${policy}{u sorted“`这是一个不同的问题,所以接受这个答案,因为它回答了您发布的问题(请参阅)然后问一个新问题。我不认为它回答了我的问题,因为我可以在bash脚本之外用awk做我想做的事情,但在bash脚本内部它做不到相同的事情。这个答案使awk脚本可以执行其他功能。你的问题与awk脚本在bash脚本内部与外部无关,你是runni在bash脚本内部和外部运行不同的awk脚本,并且在bash脚本内部运行的awk脚本在语法上是不正确的,可以使用我的答案中的语法进行更正。如果在bash脚本外部运行相同的awk脚本,您将遇到与在bash脚本内部运行它完全相同的问题。什么是不正确的ct关于我在bash之外使用的脚本?谢谢,错误由此得到了解决。但是输出非常奇怪。现在它在输出文件中打印
lru
文件的名称,而不是我的数据。`set lru=“associativity${a}Way\u cacheSize${c}KB\u replacementPolicy1.out”set policy=“associativity${a}Way cacheSize${c}KB_replacementPolicy${r}.outs“awk-v policy=“$policy”-v lru=“$lru”'FNR==NR{lineno[policy]=NR;next}{print lineno[policy],lru}'“$lru”“$policy”| sort-k 1,1n | cut d'-f2->“${policy}\u sorted这是一个不同的问题,请在回答您发布的问题时接受此答案(请参阅)然后问一个新问题。我不认为它回答了我的问题,因为我可以在bash脚本之外用awk做我想做的事情,但在bash脚本内部它做不到相同的事情。这个答案使awk脚本可以执行其他功能。你的问题与awk脚本在bash脚本内部与外部无关,你是runni在bash脚本内部和外部运行不同的awk脚本,并且在bash脚本内部运行的awk脚本在语法上是不正确的,可以使用我的答案中的语法进行更正。如果在bash脚本外部运行相同的awk脚本,您将遇到与在bash脚本内部运行它完全相同的问题。什么是不正确的关于我在bash之外使用的脚本?