Увеличение (копирование) поля для записи n

sed 's/|.*//' test.txt

grep -oP '.*?(?=\|)' test.txt

awk -F'|' '{print $1}' test.txt
2
16.03.2020, 15:19
2 ответа
$ awk '$1 ~ /^[[:upper:]]/ { letter = $1 } { $1 = letter; print }' file
A a
A b
A c
A d
A e
B a
B b
B c
B d
B e

Это просто устанавливает переменную letterв значение первого поля, если она обнаруживает символ верхнего регистра -в начале поля. Затем он, безусловно, устанавливает первое поле в сохраненные данные и печатает строку.

Используя ваш подход, выбирая первое поле через каждые пять строк,с упрощением:

$ awk 'FNR % 5 == 1 { letter = $1 } { $1 = letter; print }' file
A a
A b
A c
A d
A e
B a
B b
B c
B d
B e

В обоих вариантах я безоговорочно устанавливаю первое поле в значение letterи печатаю текущую запись. Это упрощает код.

Основная ошибка в вашем коде заключается в том, что он устанавливает VARв $1для каждой строки ввода:

{
    if ( NR%5 != 1 ) {
        print VAR, $2
    } else {
        print $1, $2
    }
    VAR = $1  # <-- problem: is triggered on every line
}
3
28.04.2021, 23:20

Выполнено приведенным ниже скриптом

step1: z=`awk 'END{print NR}' filename`
 step2: for ((i=1;i<=$z;i++)); do j=$(($i+4)); u=`awk -v i="$i" 'NR==i{print $1}' o.txt`;sed -n ''$i','$j'p' filename| awk -v u="$u" '{$1=u;print $0}'; i=$j; done

выход

A a
A b
A c
A d
A e
B a
B b
B c
B d
B e
0
28.04.2021, 23:20

Теги

Похожие вопросы