2012-10-29 85 views
2

我有一个数据集就像我已经挂在这里:http://pastebin.com/7tpBAquaawk脚本需要修订或可能grep的解决方案(新AWK)

注意前两行没有数据(数字),尽管这样,2号线是与第三条线相关联。同样,第四行与第五行关联,依此类推。

目前,我们有一个awk脚本,对人的阈值高于(低于-1和1以上的任何东西)都行号输出的信息,这是输出:

71 
72 
88 
98 
99 
.... and so on... 

如果号码即使我们需要输出奇数之后的数字(即如果72,然后输出72新的行然后73)

如果数量是奇数,那么我们需要输出偶数之前(即如果99然后输出98新行然后99)。

70 
71 
72 
73 
88 
89 

等等......

同样,这个想法是我们在发现这个噪声数据集,因此,我们需要消除它的研究是有效的。感谢您的任何帮助,您可以提供。

编辑:下面提供的解决方案,我决定把它分解为自己的个人学习以及为其他人谁可以看一下这:

"awk -F'[ ,]' 'NR>2{for (i=2;i<=NF;i++) if ($i<-1 || $i>1) print (NR%2==0) ? NR ORS NR + 1 : NR - 1 ORS NR; next }' file.txt 

首先,我们将制作一个基本算法:

if (cur == even) 
    print cur + \n + prev 
else if (cur == odd) 
    print prev + \n + cur 

-F'[ ,]' # a flag for field seperator and designating it with [ ,] 

'NR>2  # The total Number of input Records seen so far. 

{for (i=2;i<=NF;i++) # for loop starting at 2, ending when greater or equal to NR 

if ($i<-1 || $i>1) # when these conditions are met then 

print (NR%2==0) # print NR modulus 2 

? 

NR ORS NR + 1  # current OR next 

: NR - 1 ORS NR; # comparisons? 

next }'   # now go to the next NR 

file.txt   # save to file.txt 
+1

请编辑您的问题降到4-8线的样本数据,所需的输出功率。另外,由于Stackoverflow是关于帮助程序员的,而不是关于为人们做什么的工作,所以请包括迄今为止使用的代码,所获得的错误消息和当前的输出,并标记出来以表明什么是错误的。您可以格式化数据和代码,以便使用输入框顶部的格式化工具进行读取。选择所有的数据和代码,然后点击{}图标。祝你好运。 – shellter

+1

如果它是一个C shell脚本,它需要修改才能使用真实的shell而不是贝壳。 –

+0

什么是“awk c shell脚本”? awk和c-shell是两种不同的脚本语言(后者主要是一个交互式shell)。 –

回答

3

下面是使用GNU awk一种方式和一些你以前的代码:

awk -F'[ ,]' 'NR>2{for (i=2;i<=NF;i++) if ($i<-1 || $i>1) print (NR%2==0) ? NR ORS NR + 1 : NR - 1 ORS NR; next }' file.txt 
+1

+1使用三元运算符,非常流畅! – tlehman

+1

如果重复的行号是一个问题(它们可能不是,但在你的问题中不清楚),只需将命令输入到'sort -nu'。 HTH。 – Steve

+0

请问什么是ORS?这是否代表或? – jasonleonhard

2

this question取出原始码,并放入测试NR的奇偶性的条件。 (奇偶性是偶数或奇数的属性,它通过使用模数运算符:%进行测试)。

awk -F'[ ,]' 'NR>2{for (i=2;i<=NF;i++) if ($i>=-1 || $i<=1) { if(NR%2 == 0) { print NR+1 } else { print NR-1} ; next } }'