gpt4 book ai didi

linux - 补充模式

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:26 26 4
gpt4 key购买 nike

我在文件中有这些类型的记录:

1867    121 2 56 
1868 121 1 6
1868 121 2 65
1868 122 0 53
1869 121 0 41
1869 121 1 41
1871 121 1 13
1871 121 2 194

我想得到这个输出:

1867    121 2 56 
1868 121 1 6
1868 121 2 65
1868 122 0 53
1869 121 0 41
1869 121 1 41
1870 121 0 0
1871 121 1 13
1871 121 2 194

区别在于 1870 121 0 0 行。

因此,如果第一列中的数字之间的差异大于 1,那么我们必须包含一个包含缺失数字的行(上面的例子是 1870)和其他列.应该以某种方式获取其他列,让第二列成为列数可能值的最小值(在示例中,这些值可能是 121122),并且与第三列的情况相同。最后一列的值始终为零。

有人可以给我一些建议吗?提前致谢!

我正在尝试用 awk 解决它,但也许有其他更好或更实用的解决方案...

最佳答案

像这样的东西可以工作-

awk 'BEGIN{getline;a=$1;b=$2;c=$3}
NR==FNR{if (b>$2) b=$2; if (c>$3) c=$3;next}
{if ($1-a>1) {x=($1-a); for (i=1;i<x;i++) {print (a+1)"\t"b,c,"0";a++};a=$1} else a=$1;print}' file file

说明:

  1. BEGIN{getline;a=$1;b=$2;c=$3} -

    在这个 BEGIN block 我们读取第一行并在 column 1 中赋值到变量 a , column 2到变量 bcolumn 3到变量 c .

  2. NR==FNR{if (b>$2) b=$2; if (c>$3) c=$3;next} -

    在此我们扫描整个文件 ( NR==FNR ) 并跟踪 column 2 中可能的最低值和 column 3并将它们存储在变量中 bc分别。我们使用 next避免运行第二个 pattern{action}陈述。

  3. {if ($1-a>1) {x=($1-a); for (i=1;i<x;i++) {print (a+1)"\t"b,c,"0";a++};a=$1} else a=$1;print} -

    action语句检查 column 1 中的值并将其与 a 进行比较.如果差异大于 1,我们执行 for loop添加所有缺失的行并设置 a 的值至 $1 .如果 column 1 中的值在连续的行上不大于 1,我们分配值 column 1aprint它。

测试:

[jaypal:~/Temp] cat file
1867 121 2 56
1868 121 1 6
1868 121 2 65
1868 122 0 53
1869 121 0 41
1869 121 1 41
1871 121 1 13 # <--- 1870 skipped
1871 121 2 194
1875 120 1 12 # <--- 1872, 1873, 1874 skipped

[jaypal:~/Temp] awk 'BEGIN{getline;a=$1;b=$2;c=$3}
NR==FNR{if (b>$2) b=$2; if (c>$3) c=$3;next}
{if ($1-a>1) {x=($1-a); for (i=1;i<x;i++) {print (a+1)"\t"b,c,"0";a++};a=$1} else a=$1;print}' file file
1867 121 2 56
1868 121 1 6
1868 121 2 65
1868 122 0 53
1869 121 0 41
1869 121 1 41
1870 120 0 0 # Assigned minimum value in col 2 (120) and col 3 (0).
1871 121 1 13
1871 121 2 194
1872 120 0 0 # Assigned minimum value in col 2 (120) and col 3 (0).
1873 120 0 0 # Assigned minimum value in col 2 (120) and col 3 (0).
1874 120 0 0 # Assigned minimum value in col 2 (120) and col 3 (0).
1875 120 1 12

关于linux - 补充模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8736039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com