我需要计算以下输入文件的中值。它适用于奇数事件但不适用于偶数事件。下面是输入文件和使用的脚本。你能否检查一下这个命令有什么问题并纠正错误。
输入文件:
col1,col2
AR,2.52
AR,3.57
AR,1.29
AR,6.66
AR,3.05
AR,5.52
期望的输出:
AR,3.31
Unix命令:
cat test.txt | sort -t"," -k2n,2 | awk '{arr[NR]=$1} END { if (NR%2==1) print arr[(NR+1)/2]; else print (arr[NR/2]+arr[NR/2+1])/2}'
答案 0 :(得分:1)
请勿忘记输入文件还有一行,其中包含标题。您需要在awk脚本中执行额外的步骤以跳过第一行。
此外,由于您使用的是默认字段分隔符,$1
将包含整行,因此您的代码arr[NR/2]+arr[NR/2+1])/2
永远不会起作用。我建议您更改它以便awk将输入拆分为逗号,然后使用第二个字段$2
。
sort -t, -k2n,2 file | awk -F, 'NR>1{a[++i]=$2}END{if(i%2==1)print a[(i+1)/2];else print (a[i/2]+a[i/2+1])/2}'
我也删除了你对猫的无用。大多数工具,包括sort和awk,都能够直接读取文件,所以你不需要随身携带猫。
测试出来:
$ cat file
col1,col2
AR,2.52
AR,3.57
AR,1.29
AR,6.66
AR,3.05
AR,5.52
$ sort -t, -k2n,2 file | awk -F, 'NR>1{a[++i]=$2}END{if(i%2==1)print a[(i+1)/2];else print (a[i/2]+a[i/2+1])/2}'
3.31
稍微修改脚本以将输出更改为您想要的任何内容都不会太困难。