Как фильтровать данные из нескольких столбцов, разделенных точкой с запятой

Основываясь на http://zsh.sourceforge.net/Doc/Release/Files.html#Files, я бы рекомендовал поместить команду в ваш файл ~/.zshrc.

Then, if the shell is interactive, commands are read from /etc/zshrc and then $ZDOTDIR/.zshrc

Где ZDOTDIR можно установить для переопределения значения по умолчанию $HOME.

0
24.06.2021, 21:11
1 ответ

Черезawk:

  • Проверьте первые три поля, если условия выполнены для всех элементов набора. (разделить поля на ;и протестировать каждую пару)

  • Если это так, запомните положение множества в каждом поле. (в массивеsel)

  • Во втором блоке пройдитесь по всем полям и оставьте только значения, совпадающие с предыдущими позициями.

  • Печатать только, если найдено какое-либо совпадение.

    BEGIN {FS=OFS="\t"}
    {
    #select IDs of value sets to be keept
      split($1,a,";")
      split($2,b,";")
      split($3,c,";")
      nsel=0 ; delete sel
      for ( i in a ) {
          if (a[i]+0<-0.5 && b[i]+0>1 && c[i]+0>2) {
          sel[++nsel]=i
          }
      }
    #if any: run through all fields and reselect
      if (nsel) {
          for (i=1 ; i<=NF ; i++) {
              split($i,a,";")
              $i=a[sel[1]]
              for (j=2 ; j<=nsel ; j++) {
                  $i=$i";"a[sel[j]]
              }
          }
      }
    }
    #print only if any matching set was found
    nsel
    
1
28.07.2021, 11:22

Теги

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