Добавление пользовательских строк в файл с помощью shell-скрипт

у меня есть текстовый файл с произвольным числом строк, тройни, как это:

4   5   2
12  16  6

теперь я хочу добавить соответствующие строки в файл. Допустим, я хочу добавить 4 дополнительные строки в строке, которые имеют похожие значения. Первые два столбца немного изменены (-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

не имеет значения, куда добавляются строки, так что ничего страшного, если все добавленные строки находятся в конец файла.

28
задан Ben N
15.01.2023 15:00 Количество просмотров материала 3169
Распечатать страницу

1 ответ

awk:

#!/usr/bin/awk -f
BEGIN { OFS = "\t" }
{
    print
    print  - 1, ,  / 2
    print  + 1, ,  / 2
    print ,  - 1,  / 2
    print ,  + 1,  / 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(, , )
    printnew( - 1, ,  / 2)
    printnew( + 1, ,  / 2)
    printnew(,  - 1,  / 2)
    printnew(,  + 1,  / 2)
}
3
отвечен peth 2023-01-16 22:48

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх