sed :извлечение данных из выбранного столбца

Попробуйте:

$ awk '/test1/{f=0} !f{print}  /test1\/end/{f=1}' sentence.txt  
20  /test1/catergory="Food"
20  /test1/target="Adults, \"Goblins\", Elderly,
Babies, \"Witch\",
Faries"
20  /test1/type="Western"
20  /test1/theme="Halloween"
20  /test1/end=category
20  /test1/Purpose=
20  /test1/my_purpose="To create 
a fun-filled moment"
20  /test1/end=Purpose

Как это работает

При запуске awk любая неопределенная переменная по умолчанию принимает значение false. Таким образом, при запуске awk fбудет ложным. Затем Awk будет читать каждую строку по очереди и выполнять следующие три команды:

  • /test1/{f=0}

    Для любой строки, содержащей test1, мы устанавливаем переменную fв false (0 ).

    Когда мы находимся в диапазоне строк, которые мы хотим напечатать, fбудет установлено значение false.

  • !f{print}

    Если fложно, вывести текущую строку.

  • /test1\/end/{f=1}

    Для любой строки, содержащей test1/end, установите для fзначение true (1 ).

    Это означает, что мы не должны печатать следующие строки, пока не дойдем до строки, содержащей test1.

Использование переменных

awk -v a="test1" -v b="test1/end"  '$0~a{f=0} !f{print}  $0~b{f=1}' sentence.txt
1
17.12.2020, 17:49
1 ответ

Sed не предназначен для арифметики. Вы можете попробовать неуклюжие обходные пути, но Awk в этом отношении лучше :

.
awk '!/^[#@]/{printf("%.1f\n",$2*10)}' file

В GNU Awk добавьте -i inplaceдля редактирования файла на месте. Если у вас нет GNU Awk,вы можете использоватьsponge

awk '!/^[#@]/{printf("%.1f\n",$2*10)}' file | sponge file

или используйте старую добрую перезапись (в любом случае это то, что происходит под капотом...)

awk '!/^[#@]/{printf("%.1f\n",$2*10)}' file > newfile &&
mv newfile file
6
18.03.2021, 22:42

Теги

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