Как использовать awk для выбора текста из файла, начиная с номера строки до определенной строки - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть этот файл, где я хочу прочитать его, начиная с определенного номера строки, до строки.Я уже использовал

awk "NR> = $ LINE && NR <= $ ((LINE + 121)) {print}" db_000022_model1.dlg </p>

для чтения изопределенная строка до и увеличенный номер строки, но сейчас мне нужно сделать так, чтобы она сама остановилась на определенной строке, чтобы иметь возможность использовать ее в других файлах.

DOCKED: ENDBRANCH   7  22
DOCKED: TORSDOF 3
DOCKED: TER
DOCKED: ENDMDL

Я хочу остановить еепосле того как он достигнет

DOCKED: ENDMDL

#!/bin/bash

# This script is for extracting the pdb files from a sorted    list of scored
# ligands

mkdir top_poses

for d in $(head -20 summary_2.0.sort | cut -d, -f1 | cut -d/ -f1)
    do
    cd "$d"||continue
    # find the cluster with the highest population within the dlg
    RUN=$(grep '###*' "$d.dlg" | sort -k10 -r | head -1 | cut -d\| -f3 | sed 's/ //g')
    LINE=$(grep -ni "BEGINNING GENETIC ALGORITHM DOCKING $RUN of 100" "$d.dlg" | cut -d: -f1)
    echo "$LINE"
    # extract the best pose and correct the format
    awk -v line="$((LINE + 14))" "NR>=line; /DOCKED: ENDMDL/{exit}" "$d.dlg" | sed 's/^........//' > "$d.pdbqt"

    # convert the pdbqt file into pdb
    #obabel -ipdbqt $d.pdbqt -opdb -O../top_poses/$d.pdb
    cd ..
    done 

Когда я пытаюсь

awk -v line = "$ ((LINE+ 14)) "" NR> = line; / DOCKED: ENDMDL / {exit} "" $ d.dlg "|sed 's /^........//'> "$ d.pdbqt"

Так же, как в терминале оболочки, все работает.Но в скрипте выводится пустой файл.

1 Ответ

0 голосов
/ 23 сентября 2018

В зависимости от ваших требований к обработке DOCKED: ENDMDL перед вашей целевой строкой:

awk -v line="$LINE" 'NR>=line; /DOCKED: ENDMDL/{exit}' db_000022_model1.dlg

или:

awk -v line="$LINE" 'NR>=line{print; if (/DOCKED: ENDMDL/) exit}' db_000022_model1.dlg
...