我有一个像我在这里链接的数据集:http://pastebin.com/7tpBAqua
注意前两行不是数据(数字),尽管如此,第二行与第3行相关联。同样,第4行与第5行相关联,依此类推。
目前,我们有一个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
答案 0 :(得分: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 :(得分: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 } }'