Файл CSV фильтра на основе расширенных значений столбцов

[112173] Для проверки использования памяти вашей системы вы должны использовать [112508]free[112509].
  • Для использования:

    • Значение под [112510]shared[112511] и [112512]-/+ буферы/кэш[112513] является текущей доступной памятью. В данном случае это 869 МБ. Для получения более подробной информации смотрите [112514]здесь
    • Чтобы посмотреть, какие программы установлены, используйте [112516]rpm
  • 1
    11.02.2015, 14:58
    3 ответа

    Вы можете попробовать следующее:

    $ sort -rt"," -k2,3 file.csv | 
       awk -F, '{a[$2][$3]=$0; if(a[$2][$4]){print a[$2][$4]; print;}}'
    RZ_AUTO_7,4tow,131,132,98,99,UC/AC Canonical ribose-zipper
    RZ_AUTO_5,4tow,130,131,99,100,AU/CA Canonical ribose-zipper
    RZ_AUTO_2,4tov,1405,1406,1517,1518,GU/AA Naked ribose-zipper
    RZ_AUTO_1,4tov,1404,1405,1518,1519,CG/AA Canonical ribose-zipper
    

    Объяснение

    • Сортировка отсортирует файл на основе 2-го и 3-го полей, поэтому что строки с одинаковым PDBID сортируются вместе и в соответствии с положением 1-го остатка функции. -r меняет порядок сортировки (так что сначала печатаются большие числа), -t, устанавливает разделитель полей на , и -k определяет поля для сортировки.

    Что касается сценария awk :

    • -F, : установите разделитель полей на , .
    • a [$ 2] [$ 3] = $ 0; : это список списков, двумерный массив. Например, для первой строки это будет a [4tov] [1404] = $ 0 . a - это просто имя массива.Устанавливается значение текущей строки, $ 0 .
    • if (a [$ 2] [$ 4]) : если четвертое поле (второй остаток) было замечено связанным с тем же PDBID, что и первый остаток.
    • выведите [$ 2] [$ 4]; print; : распечатать строку, в которой он был замечен (поскольку он был сохранен как значение массива a ) и текущую строку.

    У меня нет доступа к OSX для проверки, но, судя по вашему комментарию , похоже, что OSX awk , в отличие от GNU awk , не может справиться с многомерными массивами. Итак, вот то же самое в Perl:

    sort -rt"," -k2,3 file.csv | 
     perl -F"," -ane '$k{$F[1]}{$F[2]}=$_; 
                      print "$k{$F[1]}{$F[3]}$_" if $k{$F[1]}{$F[3]}'
    
    4
    27.01.2020, 23:20

    через Python3 с использованием модуля RE .

    #!/usr/bin/python3
    import re
    import sys
    j = sys.argv[1]
    with open(j) as f:
        fil = f.read()
    m = re.findall(r'(?s)(?:^|\n)([^,]*,([^,]*),[^,]*,([^,]*)[^\n]*).*?\n([^,]*,\2,\3,[^\n]*)', fil)
    for i in m:
        print(i[0]+'\n'+i[-1])
    

    Сохраните вышеуказанный код в файле с именем Script.py и выполните этот файл, запустив команду ниже на терминале.

    python3 script.py inputfile
    

    Regex Demo

    $ python3 script.py file.csv
    RZ_AUTO_1,4tov,1404,1405,1518,1519,CG/AA Canonical ribose-zipper
    RZ_AUTO_2,4tov,1405,1406,1517,1518,GU/AA Naked ribose-zipper
    RZ_AUTO_5,4tow,130,131,99,100,AU/CA Canonical ribose-zipper
    RZ_AUTO_7,4tow,131,132,98,99,UC/AC Canonical ribose-zipper
    
    0
    27.01.2020, 23:20

    Вы можете использовать TextQL , чтобы запросить данные электронной таблицы, такие как база данных SQL.

    0
    27.01.2020, 23:20

    Теги

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