Печатать слово после строки - PullRequest
0 голосов
/ 04 февраля 2019

Как напечатать слово после строки centrain?

У меня есть файл

Hello word.

Я хочу получить вывод:

#word

Что-то вроде

awk '{ print '#' }'

Спасибо

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

РЕДАКТИРОВАТЬ: Если вы хотите найти строку и напечатать строку рядом с ней, попробуйте выполнить следующее.Я ищу hello строку здесь, вы можете изменить ее в соответствии с вашими потребностями.

awk '{for(i=1;i<=NF;i++){if(tolower($i)=="hello"){print "#"$(i+1)}}}' Input_file

ИЛИ (создайте переменную awk и выполните проверки, это поможет изменить строку вместо приветствия всама переменная)

awk -v word_to_search="hello" '{for(i=1;i<=NF;i++){if(tolower($i)==word_to_search){print "#"$(i+1)}}}'  Input_file

Если вы хотите напечатать следующее ключевое слово, найдя строку и удалив знаки пунктуации, попробуйте выполнить следующее.

awk -v word_to_search="hello" '{for(i=1;i<=NF;i++){if(tolower($i)==word_to_search){sub(/[[:punct:]]+/,"",$(i+1));print "#"$(i+1)}}}' Input_file


Не могли бы вы попробоватьследующие.

awk -F'[ .]' '{print "#"$2}' Input_file

ИЛИ

awk -F'[ .]' '{print $(NF-1)}'  Input_file
0 голосов
/ 04 февраля 2019

Вы можете использовать

awk '{sub(/[[:punct:]]+$/, "", $2);print "#"$2}' file > newfile

См. Онлайн-демонстрацию .

Операция sub(/[[:punct:]]+$/, "", $2) удаляет 1 или более знаков препинания ([[:punct:]]+) изконец ($) поля 2 и print "#"$2 добавляет к нему # и печатает его.

Чтобы получить слово после Hello, вы можете использовать

cat file | grep -Po 'Hello\s+\K\w+' | awk '{print "#"$0}'

См. онлайн-демо

Или, с помощью sed:

sed 's/.*Hello \([[:alnum:]]*\).*/#\1/' file > newfile

См. другое демо .

Здесь .*Hello \([[:alnum:]]*\).* соответствует любым 0+ символам, затем Hello, пробелу, затем захватывает 0 или более буквенно-цифровых символов в Группу 1 (\1) и затем соответствует остальной части строки.Шаблон #\1 в RHS оставляет только то, что было снято с # впереди.

Другое решение с awk с . и / в качестве разделителей полей с использованием -F'[/.]':

awk -F'[/.]' '{for(i=1;i<=NF;i++){if($i=="54517334"){print "#"$(i+1)}}}' file

См. онлайн-демонстрацию

Здесь for(i=1;i<=NF;i++) перечисляет все поля, и если поле равно 54517334, следующее поле с# перед началом печатается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...