Удаление столбца на основе количества совпадений строки в столбце

Эта проблема отслеживалась здесь:проблема kde

Обходной путь:

Откройте :IntelliJ IDEA -> Справка > Редактировать пользовательские свойства

и поместите эту строку:

suppress.focus.stealing=false

Примечание. :Ide может потребоваться перезагрузка, чтобы применить это новое свойство.

5
18.07.2019, 16:57
3 ответа

Один из подходов — прочитать файл дважды. В первый раз считают F, а во второй раз выводят строку. Что-то вроде

#!/bin/sh

awk -v n=3 '
        NR==FNR { for (i=1;i<=NF;i++) { if ($i == "F") { c[i]++ }} ;next }                                                                            
        { for (i=1;i<=NF;i++) { if (c[i] < n) { printf("%s ", $i) } } ;printf("\n") }                                                                 

' filename filename

NR==FNR— это уловка, чтобы увидеть, первый или второй раз мы читаем файл. Предполагая, что в файле вообще есть какие-либо строки, это верно только при первом чтении файла. Массив cпредставляет собой количество F символов в этом столбце. nextговорит, что вся обработка этой строки завершается при первом чтении файла. Вторая строка выполняется при втором чтении файла.

3
27.01.2020, 20:39

Вот иллюстрация метода транспонирования -линейного фильтра -транспонирования . Возможно, это не подходит для вашего (большого файла ), но может быть полезным для других:

$ cat file
F G F H H
G F F F A
F G F F F
F F F T F

, затем

$ rs -T < file | perl -alne 'print unless (grep { $_ eq "F" } @F) > 3' | rs -T
F  G  H  H
G  F  F  A
F  G  F  F
F  F  T  F
2
27.01.2020, 20:39

Попытался с приведенным ниже сценарием, все работает нормально

for ((i=1;i<=5;i++)); do c=`awk -v i="$i" '{print $i}' o.txt|awk '$1=="F" {print $0}'| sed -n '/F/{;=;p}'| sed "N;s/\n/ /g"| sort -k1 -rn|sed -n '1p'| awk '{print $1}'`; if [[ $c -lt 3 ]]; then awk -v i="$i" '{print $i}' o.txt >file_$i; fi; done

paste  file_*

выход

G H H
F F A
G F F
F T F
0
27.01.2020, 20:39

Теги

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