Пропускать строки с совпадающим шаблоном и удалять строки с совпадающим условием

У меня есть файл следующего формата:

Q
L
A D
1 10
2 21
3 22
4 5
5 9

Мне нужно пропустите строки, начинающиеся с «Q» или «L», и удалите строки, где значение второго столбца больше 10, и сохраните все это в новом файле. Примеры выходных файлов:

Output file 1
    Q
    L
    A D
    1 10
    4 5
    5 9 

Output file 2
1
4
5

Код:

while read -r line; if [[ $line == "A" ]] ||[[ $line == "Q" ]]||[[ $line == "L" ]] ; then 
awk '$2 < "11" { print $0 }' test.txt
awk '$2 < "11" { print $1 }' test1.txt
done < input.file
0
24.05.2019, 01:00
2 ответа

Вы можете использовать простое регулярное выражение для фильтрации строк, начинающихся с букв A, L или Q плюс условие. awkхорошо подходит для чего-то подобного:

awk '($0 ~ /^[AQL]/ || $2 < 11) { print $0 }' < input.file > output.file1
awk '($0 ~ /^[^AQL]/ && $2 < 11) { print $1 }' < input.file > output.file2
0
28.01.2020, 03:40

Протестировано с помощью приведенной ниже команды, все работает нормально

команда

awk '$1 !~ "Q|L" && $2 <11{print $1}' filename

выход

awk '$1 !~ "Q|L" && $2 <11{print $1}' filename
1
4
5
0
28.01.2020, 03:40

Теги

Похожие вопросы