Простой способ отфильтровать строки с пробелами использует перевернутый соответствие с grep
:
grep -v ' ' input.txt
Если необходимо использовать awk
:
awk '!/ /' input.txt
Или perl
:
perl -ne '//|| print' input.txt
Или чисто bash
:
while read line; do [[ $line == *' '* ]] || echo $line; done < input.txt
# or
while read line; do [[ $line =~ ' ' ]] || echo $line; done < input.txt
UPDATE
Чтобы проверить, если, скажем, поле 2 содержит пространство, вы могли бы использовать awk
так:
awk -F, '$2 !~//' input.txt
Чтобы проверить, если, скажем, поле 2 ИЛИ поле 3 содержит пробел:
awk -F, '!($2 ~// || $3 ~//)' input.txt
Для вашего последующего вопроса в комментариях
Чтобы сделать то же самое с помощью sed
, я знаю только эти неудобные решения:
# remove lines if 2nd field contains space
sed -e '/^[^,]*,[^,]* /d' input.txt
# remove lines if 2nd or 3rd field contains space
sed -e '/^[^,]*,[^,]* /d' -e '/^[^,]*,[^,]*,[^,]* /d' input.txt
Для вашего 2-й последующего вопроса в комментариях
Для игнорирования ведущих пространств в 2-м или 3-м полях:
awk -F', *' '!($2 ~// || $3 ~//)' input.txt
# or perhaps what you really want is this:
awk -F', *' -v OFS=, '!($2 ~// || $3 ~//) { print $1, $2, $3 }' input.txt
Зачем использовать 'awk', когда' grep -v' будет работать отлично? – SuperSaiyan
'is't' - самая странная орфографическая ошибка, которую я видел в этом году. Клянусь. –
Обновление вопроса с дополнительным требованием, изменяющим игру, после того, как вы получили несколько существенных ответов, не является хорошей формой. У меня возникнет соблазн предложить вернуться к редактированию, принять ответ и задать новый вопрос. – tripleee