Печатать строки с номерами во втором столбце

-8

это мои данные - у меня больше 1000 раз. как получить только rec с числами в нем.

Records | Num

123 | 7 Y1 91

7834 | 7PQ34-102

AB12AC|87 BWE 67

5690278| 80505312

7ER| 998

Результат должен быть

7ER| 998

5690278| 80505312

Я новичок в программировании на Linux, любая помощь мне очень полезна. Спасибо всем

спросил(а) 2021-01-25T16:03:00+03:00 4 месяца, 4 недели назад
1
Решение
64

Я бы использовал awk:

awk -F'[[:space:]]*[|][[:space:]]*' '$2 ~ /^[[:digit:]]+$/'

Если вы хотите напечатать количество удаленных строк, как вы просили в комментариях, вы можете использовать это:

awk -F'[[:space:]]*[|][[:space:]]*' '
{
if($2~/^[[:digit:]]+$/){print}else{c++}
}
END{printf "%d lines deleted\n", c}' file

ответил(а) 2021-01-25T16:03:00+03:00 4 месяца, 4 недели назад
45

Короткий и простой скрипт GNU awk (gawk) для фильтрации строк с номерами во втором столбце (поле), предполагая однословное поле (например, 1234 или 12AB):

awk -F'|' '$2 ~ /\y[0-9]+\y/' file

Мы используем расширение GNU для операторов regexp, т.е. \y для сопоставления границы слова. Кроме этого, довольно просто: мы разделяем поля на | и найдите выделенные цифры во втором поле.

Изменить. Поскольку вопрос был обновлен и теперь явно позволяет использовать несколько слов во втором поле (например, 12 AB, 12-34, 12 34), чтобы получить строки с числами и разделителями только во втором поле:

awk -F'|' '$2 ~ /^[- 0-9]+$/' file

В качестве альтернативы, если мы говорим, что во втором поле запрещены только буквы, мы можем использовать:

awk -F'|' '$2 ~ /^[^a-zA-Z]+$/' file

ответил(а) 2021-01-25T16:03:00+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема