Как использовать файл шаблонов поиска для поиска точных слов в последнем столбце CSV-файла?

В прежние времена (в 1970-х )люди действительно писали простой код, который делал вещи трудными для понимания. С этим связаны другие ответы.

Если вы используете оболочку, которой меньше 30 лет, вы можете сделать это более понятным способом.:

umask g+w

Это лучше, так как в этом режиме маска инвертируется.

Фон :интерфейс ядра по-прежнему управляет маской, которая применяется к третьему параметру open().

С 1988 (с ksh88 )был установлен новый интерфейс оболочки для команды chmodв оболочке.

umask -S

печатает маску режима создания файла в современном символическом синтаксисе chmodи

umask u=rw,g=rw,o=r

позволяет установить маску создания файла, используя синтаксис chmod.

1
26.08.2020, 15:12
3 ответа
awk 'NR==FNR{a[$1];next}{n=split($NF,b,";");for(i=1;i<=n;i++){if(b[i] in a){print;break}}}' file2 file1

Размотанный вариант:

awk '
  NR==FNR{a[$1];next}
  {
    n=split($NF,b,";")
    for(i=1;i<=n;i++){
      if(b[i] in a){print;break}
    }
  }   
' file2 file1

split($NF,b,";")разбивает последнее поле точкой с запятой и помещает результаты в массив b. Он возвращает количество элементов b, которое присваивается n. В вашей строке примера n=2, b[1]=166486и b[2]=1897048.

if(b[i] in a){print;break}если есть точное совпадение, печатается строка и цикл прерывается, чтобы не печатать одну и ту же строку дважды.

3
18.03.2021, 23:09

Структура данных python setдает нам способ сравнить и найти, находится ли одно из чисел, разделенных точкой с запятой -, в другом наборе, который сформирован номерами файла2. Устанавливаем пересечение, когда получается непустое, идем дальше и печатаем текущую строку.

python3 - file1 file2 <<\eof
import sys

data, pat = sys.argv[1:]
rs, fs = '\n', '\t'

with open(pat) as fp, open(data) as fd:
  pats = set(fp.read().splitlines())
  for l in fd:
    s = l.rstrip(rs).split(fs)[-1].split(';')
    if set(s) & pats: print(l, end='')
eof
0
18.03.2021, 23:09

команда

 awk 'NR == FNR {a[$1];next}FS=";"($NF in  a){print $0}' f2 f1

выход

NODE_1_length_45927_cov_22.029055_g0_i0 WP_055195622.1  93.1    729     50      0       291     2477    1       729     0.0e+00 1275.4  166486;1897048
0
18.03.2021, 23:09

Теги

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