awk / sed для друку лише до символу підкреслення


10

Як я можу використовувати awk або sed для друку рядка лише до першого символу підкреслення?

Перед:

host100_044 2
host101_045 2
host102_046 2

Після:

host100
host101
host102

Відповіді:


20

Це можна зробити за допомогою cut:

cut -d _ -f 1

напр

$ echo host100_044 2 | cut -d _ -f 1
host100

Також awkце можна зробити за допомогою awk -F_ '{print $1}'(можливо, існує більш чистий спосіб зробити це)


@Renan Як я можу змінити цю функцію вирізання, якщо я хочу, щоб висновок містив всю вхідну інформацію на додаток до виконання скорочення?
BioMan

2

Ще одна альтернатива sed:

echo 'host100_044 2' | sed 's/^\(.*\)_.*$/\1/'

Якщо вони є у файлі, ви можете назвати його наступним чином;

cat fileName | sed 's/^\(.*\)_.*$/\1/'

1
echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} {printf("host%s ", $1)}'  | cut -d ' ' -f2-

Вихід:

host100 host101 host102

З новими рядками:

echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} $1 ~ /[0-9]/ {print "host"$1}'

Вихід:

host100
host101
host102

1

Використання sed:

echo host100_044 2 | sed 's;_.*;;'


Використовуючи sedопцію редагування на місці,

sed -i.old 's;_.*;;' infile

Просто писав те саме, хоча awkрішення вже розміщено (і cut, мабуть, найкраще в цьому випадку), оскільки він про це запитав sed, але ти бив мене секундами :-). Ви навіть можете зняти смужку $, оскільки вона .*за замовчуванням буде відповідати кінці рядка.
Даніель Андерссон

@DanielAndersson: так.
Принц Джон Веслі

1
$ echo "host100_044 2" | awk -F'_' '{print $1}'
host100

У -F'_'інструктує awkвикористовувати знак підкреслення в якості поля роздільників. Сам awkсценарій просто друкує перше поле.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.