Пропускать строки, начинающиеся с символа, и удалять строки, соответствующие второму столбцу, меньшему, чем значение - PullRequest
0 голосов
/ 24 мая 2019

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

Qil
Lop
A D E
a 1 10
b 2 21
c 3 22
d 4 5
3 5 9

Мне нужно пропустить строки чтения, начинающиеся с шаблона 'Qil' или 'Lop' или 'ADE', и удалить строки, в которых третий столбец имеет значениебольше 10 и сохраните всю вещь в 2 разных файлах с форматами, как показано ниже.Пример выходных файлов:

Output file 1
    Qil
    Lop
    A D E
    a 1 10
    d 4 5
    3 5 9 

Output file 2
a
d
3

Мой код:

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

Ответы [ 2 ]

3 голосов
/ 24 мая 2019

Не могли бы вы попробовать следующее.

awk '
/^Qil$|^Lop$|^A D E$/{
   val=(val?val ORS:"")$0
   next
}
$3<=10{
   if(!flag){
       print val > "file1"
       flag=1
   }
   print > "file1"
   if(!a[$1]++){
       print $1> "file2"
   }
}'  Input_file

Это создаст 2 выходных файла с именами file1 и file2 в соответствии с требованиями OP.

2 голосов
/ 24 мая 2019

Это можно сделать за один awk:

awk '$1 !~ /^[QLA]/ && $2 <= 10' file

1 10
4 5
5 9

Если вы хотите напечатать только первый столбец, используйте:

awk '$1 !~ /^[QLA]/ && $2 <= 10 { print $1 }' file

1
4
5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...