Поддержка Multiarch все еще находится на очень ранних стадиях. В 11.10 было достаточно многоархива для flash и skype. В 12.04 он будет охватывать все ia32-libs, но не все остальное. Это займет годы, хотя наиболее популярные биты, вероятно, будут первыми.
Вы можете использовать awk (на самом деле это должна быть реализация GNU AWK gawk, а не mawk, которая содержит меньше функций - вам, возможно, придется установить ее sudo apt install gawk) для этого задания:
gawk '{match($3,/\((.+)\)/,m);if(m[1]>=60){print $0}}' MY_FILE
Теперь, хотя по общему признанию это выглядит как черная магия для неподготовленного глаза, логика проста:
Для каждой строки запустите материал внутри самых внешних фигурных скобок: во-первых, match($3, /\((.+)\)/, m) соответствует регулярное выражение \((.+)\) (которое соответствует открытой и закрывающей круглой скобке, сохраняя содержимое между скобками в качестве первой группы захвата) против третьего столбца $3 обработанной строки ввода и сохраняет полученный массив соответствия в переменной m. Затем проверьте условие if (m[1] >= 60), т.е. если значение первой группы захвата соответствия (независимо от того, что находится между скобками на входе) больше или равно 60. Если это так, сделайте {print $0}, который просто печатает всю обрабатываемую строку.Нет необходимости в расширениях Gawk:
awk -F '[()]' '$4 >= 60'
Здесь токенизатор awk, указанный через -F, представляет собой набор регулярных выражений []: поля разделяются либо открывающей, либо закрывающейся скобкой, поэтому вы см. номер вашего третьего столбца - это 4-ое awk-поле.
Если вы не хотите изучать / использовать инструменты командной строки, вы можете также открыть файл в LibreOffice Calc и просто фильтровать данные (Calc поддерживает файлы с разделителями-разделителями).
Если вы знаете какой-либо язык программирования, то тривиально написать небольшую программу для фильтрации данных.
Но если у вас есть большой набор данных для обработки, используя СУБД, такую как MySQL будет проще, быстрее и интуитивно.
Ниже приведен параметр perl alternate
perl -alne 'print unless $F[2] =~ /\((\d+)\)$/ && $1 < 60'
и фиксирует в конце 3-го (нулевое индексирование) поле в скобках десятичных цифр, если найдено совпадение, проверьте численное значение захваченной группы и напечатайте соответственно Пример
$ perl -alne 'print unless $F[2] =~ /\((\d+)\)$/ && $1 < 60' file
12713 Bacteria(100) Bacteroidetes(100) Bacteroidia(100)
Обратите внимание, что это реализует логику «удалите все строки в файле, число которых меньше 60 в столбце 3», как указано в вашем вопрос - который немного отличается от строк печати, число которых больше или равно 60.
Если ваши файлы действительно разделены запятыми (а не пробелы, как показано на вашем вопрос), тогда вам нужно будет изменить разделитель, т. е.
perl -F, -lne 'print unless $F[2] =~ /\((\d+)\)$/ && $1 < 60'
Вы можете использовать awk (на самом деле это должна быть реализация GNU AWK gawk, а не mawk, которая содержит меньше функций - вам, возможно, придется установить ее sudo apt install gawk) для этого задания:
gawk '{match($3,/\((.+)\)/,m);if(m[1]>=60){print $0}}' MY_FILE
Теперь, хотя по общему признанию это выглядит как черная магия для неподготовленного глаза, логика проста:
Для каждой строки запустите материал внутри самых внешних фигурных скобок: во-первых, match($3, /\((.+)\)/, m) соответствует регулярное выражение \((.+)\) (которое соответствует открытой и закрывающей круглой скобке, сохраняя содержимое между скобками в качестве первой группы захвата) против третьего столбца $3 обработанной строки ввода и сохраняет полученный массив соответствия в переменной m. Затем проверьте условие if (m[1] >= 60), т.е. если значение первой группы захвата соответствия (независимо от того, что находится между скобками на входе) больше или равно 60. Если это так, сделайте {print $0}, который просто печатает всю обрабатываемую строку.Нет необходимости в расширениях Gawk:
awk -F '[()]' '$4 >= 60'
Здесь токенизатор awk, указанный через -F, представляет собой набор регулярных выражений []: поля разделяются либо открывающей, либо закрывающейся скобкой, поэтому вы см. номер вашего третьего столбца - это 4-ое awk-поле.
Если вы не хотите изучать / использовать инструменты командной строки, вы можете также открыть файл в LibreOffice Calc и просто фильтровать данные (Calc поддерживает файлы с разделителями-разделителями).
Если вы знаете какой-либо язык программирования, то тривиально написать небольшую программу для фильтрации данных.
Но если у вас есть большой набор данных для обработки, используя СУБД, такую как MySQL будет проще, быстрее и интуитивно.
Ниже приведен параметр perl alternate
perl -alne 'print unless $F[2] =~ /\((\d+)\)$/ && $1 < 60'
и фиксирует в конце 3-го (нулевое индексирование) поле в скобках десятичных цифр, если найдено совпадение, проверьте численное значение захваченной группы и напечатайте соответственно Пример
$ perl -alne 'print unless $F[2] =~ /\((\d+)\)$/ && $1 < 60' file
12713 Bacteria(100) Bacteroidetes(100) Bacteroidia(100)
Обратите внимание, что это реализует логику «удалите все строки в файле, число которых меньше 60 в столбце 3», как указано в вашем вопрос - который немного отличается от строк печати, число которых больше или равно 60.
Если ваши файлы действительно разделены запятыми (а не пробелы, как показано на вашем вопрос), тогда вам нужно будет изменить разделитель, т. е.
perl -F, -lne 'print unless $F[2] =~ /\((\d+)\)$/ && $1 < 60'