如果一列的值等于上一行中同一列的值加一,则给出相同的代码
If value of a column equals value of same column in previous line plus one, give the same code
我有一些数据如下所示:
chr1 3861154 N 20
chr1 3861155 N 20
chr1 3861156 N 20
chr1 3949989 N 22
chr1 3949990 N 22
chr1 3949991 N 22
我需要做的是根据第2列给出一个代码。如果该值等于上一行的值加一,那么它们来自同一系列,我需要在一个中给它们相同的代码新专栏。该代码可能是该系列第一行的值。此示例的所需输出为:
chr1 3861154 N 20 3861154
chr1 3861155 N 20 3861154
chr1 3861156 N 20 3861154
chr1 3949989 N 22 3949989
chr1 3949990 N 22 3949989
chr1 3949991 N 22 3949989
我正在考虑使用 awk,但这当然不是必需的。
关于如何使这项工作有任何想法吗?
编辑以添加我正在使用的代码:
awk 'BEGIN {var = } {if ( == var+1) print [=12=]"\t"var; else print [=12=]"\t"; var = }' test
我觉得想法是有的,但是还不太对。我得到的结果是:
chr1 3861154 N 20 3861154
chr1 3861155 N 20 3861154
chr1 3861156 N 20 3861155
chr1 3949989 N 22 3949989
chr1 3949990 N 22 3949989
chr1 3949991 N 22 3949990
谢谢!
$ cat tst.awk
(NR == 1) || ( != (prev+1)) {
val =
}
{
print [=10=], val
prev =
}
$ awk -f tst.awk file
chr1 3861154 N 20 3861154
chr1 3861155 N 20 3861154
chr1 3861156 N 20 3861154
chr1 3949989 N 22 3949989
chr1 3949990 N 22 3949989
chr1 3949991 N 22 3949989
你脚本中最大的错误是这部分:
BEGIN {var = }
因为:
</code>是当前输入行的第二个字段。</li>
<li><code>BEGIN
在读取任何输入行之前执行。
因此 BEGIN
部分中
的值是零或空,就像任何其他未设置的变量一样。
我有一些数据如下所示:
chr1 3861154 N 20
chr1 3861155 N 20
chr1 3861156 N 20
chr1 3949989 N 22
chr1 3949990 N 22
chr1 3949991 N 22
我需要做的是根据第2列给出一个代码。如果该值等于上一行的值加一,那么它们来自同一系列,我需要在一个中给它们相同的代码新专栏。该代码可能是该系列第一行的值。此示例的所需输出为:
chr1 3861154 N 20 3861154
chr1 3861155 N 20 3861154
chr1 3861156 N 20 3861154
chr1 3949989 N 22 3949989
chr1 3949990 N 22 3949989
chr1 3949991 N 22 3949989
我正在考虑使用 awk,但这当然不是必需的。 关于如何使这项工作有任何想法吗?
编辑以添加我正在使用的代码:
awk 'BEGIN {var = } {if ( == var+1) print [=12=]"\t"var; else print [=12=]"\t"; var = }' test
我觉得想法是有的,但是还不太对。我得到的结果是:
chr1 3861154 N 20 3861154
chr1 3861155 N 20 3861154
chr1 3861156 N 20 3861155
chr1 3949989 N 22 3949989
chr1 3949990 N 22 3949989
chr1 3949991 N 22 3949990
谢谢!
$ cat tst.awk
(NR == 1) || ( != (prev+1)) {
val =
}
{
print [=10=], val
prev =
}
$ awk -f tst.awk file
chr1 3861154 N 20 3861154
chr1 3861155 N 20 3861154
chr1 3861156 N 20 3861154
chr1 3949989 N 22 3949989
chr1 3949990 N 22 3949989
chr1 3949991 N 22 3949989
你脚本中最大的错误是这部分:
BEGIN {var = }
因为:
</code>是当前输入行的第二个字段。</li> <li><code>BEGIN
在读取任何输入行之前执行。
因此 BEGIN
部分中 的值是零或空,就像任何其他未设置的变量一样。