Удалить конкретное поле, если столбец совпадает с другим столбцом

Короткийgrep+awkподход:

Допустим, множитель равен3:

grep -sB 3 "All true" file.out | awk -v x=3 '$1=="|"{ print $3*x }'

Выход:

370.368
2367.37

  • -v x=3-передача множителя как xпеременной в скрипт awk
0
20.09.2019, 12:23
1 ответ

Предполагая, что у вас одинаковое количество места в столбцах 1 и 3, вы можете использовать

awk -F '|' -v OFS='|' '$1==$3 { for(i = 3; i < NF-1; i++) $i = $(i+2); NF -= 2 } { print }' sample.txt

Пояснение:

-F '|' -v OFS='|'установить разделители полей ввода и вывода
$1 == $3условие :столбцы 1 и 3 равны
for(i = 3; i < NF-1; i++) $i = $(i+2);начиная со столбца 3, переместить значения на 2 столбца вперед
NF -= 2уменьшить количество столбцов
{ print }безусловно напечатать строку

Обратите внимание, что скрипт не удаляет столбцы 3 и 4 из заголовка, поскольку IDне равно id.

0
28.01.2020, 03:16

Теги

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