Замена строки по столбцу с помощью Sed - PullRequest
3 голосов
/ 02 апреля 2009

Учитывая эти данные

34 foo
34 bar
34 qux
62 foo1
62 qux
78 qux 

Я хочу заменить строку во 2-м столбце на "", если это "qux". Результирующая:

34 foo
34 bar
34 
62 foo1
62 
78  

Как ты это делаешь с помощью sed? В частности, данные очень большие, ~ 10 ^ 7 строк

Ответы [ 3 ]

15 голосов
/ 02 апреля 2009

Я не будет на самом деле сделать это с sed, так как это не лучший инструмент для работы. Инструмент awk - мой выбор, когда кто-то упоминает столбцы.

cat file | awk '$2 == "qux" { print $1 } $2 != "qux" { print $0 }'

или простейшая форма:

cat file | awk '{ if ($2 == "qux") {$2 = ""}; print }'

Если вы должны использовать sed:

cat file | sed 's/  *qux *$//'

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

3 голосов
/ 02 апреля 2009

Без пробелов:

sed 's/qux$//' < file

Если это должно быть во втором столбце (потенциально более трех столбцов):

sed 's/\([0-9][  ]*\)qux\(.*\)/\1\2/'

(Обратите внимание, что есть буквальная вкладка и пробел; sed не соответствует вкладкам с '\ t';

Но для табличных данных лучше использовать awk:

awk '{ if ($2 == "qux") {$2 = ""; print} else { print }; }' < file
1 голос
/ 19 октября 2011
 nawk '{ gsub( /qux/, " " ); print }' filename
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...