使用 shell 脚本向文件添加自定义行

使用 shell 脚本向文件添加自定义行

我有一个具有任意行数的文本文件,三元组如下:

4   5   2
12  16  6

现在我想向文件添加相关行。假设我想为每行添加 4 个具有相似值的额外行。前两列略有改变(其中一列为 -1 和 +1,所有四种组合均为 -1 和 +1),第三列的值减半:

4   5   2   (original row)
3   5   1   (added rows)
5   5   1
4   4   1
4   6   1
12  16  6   (original row)
11  16  3   (added rows)
13  16  3
12  15  3
12  17  3

行附加到哪里并不重要,所以如果添加的行全部位于文件末尾就可以了。

答案1

awk

#!/usr/bin/awk -f
BEGIN { OFS = "\t" }
{
    print
    print $1 - 1, $2, $3 / 2
    print $1 + 1, $2, $3 / 2
    print $1, $2 - 1, $3 / 2
    print $1, $2 + 1, $3 / 2
}

当然,这有点取决于您需要如何格式化输出。上例假设输入记录以制表符分隔。


为了删除此后的重复项,请通过管道传输输出sort -n | uniq

首先不打印它们(因此保留原始顺序)的变体可以将看到的值存储在数组中并仅打印新的值:

#!/usr/bin/awk -f
function printnew(a, b, c) {
    if(seen[a, b, c] != 1) {
        seen[a, b, c] = 1
        print a, b, c
    }
}

BEGIN { OFS = "\t" }

{
    printnew($1, $2, $3)
    printnew($1 - 1, $2, $3 / 2)
    printnew($1 + 1, $2, $3 / 2)
    printnew($1, $2 - 1, $3 / 2)
    printnew($1, $2 + 1, $3 / 2)
}

相关内容