Как я могу удалить текст из строки после определенного символа с помощью awk


12

Как я могу использовать awk для удаления всего текста после определенного символа ";" что появляется в каждой строке моего текстового файла? (Тогда мне нужно бегать по циклам по тексту)

Jenny,Sarah,John;North Dakota

Henry,Frank;Illinois

Aaron,Kathryn,Caitlin,Harris;New York

1
Пожалуйста, покажите нам текстовый файл, дьявол в деталях с такого рода вещами.
Terdon

Я привел пример сейчас @terdon
Дженни

Ответы:


18

Есть два основных подхода.

  1. Установите awkразделитель полей для этого символа. После этого вы можете получить нужные запчасти $1:

    $ echo "Today was cloudy; yesterday too" | awk -F';' '{print $1}'
    Today was cloudy
    
  2. Используйте, gsub()чтобы заменить его пустой строкой:

    $ echo "Today was cloudy; yesterday too" | awk '{sub(/;.*/,""); print}'
    Today was cloudy
    

Итак, для вашего примера:

$ awk -F';' '{print $1}' file
Jenny,Sarah,John

Henry,Frank

Aaron,Kathryn,Caitlin,Harris

4

Вот ответ: sedпоскольку вы не выполняете никакой обработки полей, awk, вероятно, излишний.

sed 's/;.*//'

1
+1, но, основываясь на комментариях ОП , я предполагаю, что это часть более крупного сценария. @ Дженни, это та деталь, которую ты должен включить в свои вопросы, кстати.
Terdon


0

Иногда вы можете захотеть заменить все символы после определенного слова другой строкой. Например:

original_string="abc blabla foo bar" и вы хотите заменить слова после Blabla на «Привет мир»

echo $original_string | sed -E 's/(.+ blabla) .+/\1 hello world/'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.