Как я могу удалить текст из строки после определенного символа с помощью 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
4

А также просто cut..

cut -d\; -f1 file
Scrutinizer
источник
0

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

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

echo $original_string | sed -E 's/(.+ blabla) .+/\1 hello world/'
Кемин Чжоу
источник