bash estraendo la prima riga dalla tabella [duplicato]

Oct 01 2020

Una seconda domanda per la minaccia dei file di registro per i modelli di tabella. Mi occupo dell'analisi di un gran numero di file di testo dlg che si trovano all'interno della directory di lavoro. Ogni file ha una tabella (solitamente situata alla fine del registro) nel seguente formato:

 RMSD TABLE
    __________


_____________________________________________________________________
     |      |      |           |         |                 |
Rank | Sub- | Run  | Binding   | Cluster | Reference       | Grep
     | Rank |      | Energy    | RMSD    | RMSD            | Pattern
_____|______|______|___________|_________|_________________|___________
   1      1      7       -1.43      0.00    178.12           RANKING
   1      2     18       -0.96      1.88    177.35           RANKING
   2      1      4       -0.97      0.00    178.43           RANKING
   3      1     13       -0.60      0.00    178.03           RANKING
   4      1      5       -0.56      0.00    198.10           RANKING
   5      1     16       +0.01      0.00    189.71           RANKING
   6      1      3       +0.06      0.00    176.95           RANKING
   7      1     19       +0.10      0.00    177.27           RANKING
   8      1     17       +0.13      0.00    177.60           RANKING
   9      1      8       +0.20      0.00    177.05           RANKING
  10      1     20       +0.27      0.00    177.43           RANKING
  11      1     10       +0.34      0.00    176.33           RANKING
  12      1      6       +0.37      0.00    177.30           RANKING
  13      1      9       +0.44      0.00    175.48           RANKING
  14      1      2       +0.46      0.00    175.67           RANKING
  15      1     11       +0.84      0.00    177.52           RANKING
  15      2     12       +1.31      1.95    178.03           RANKING
  16      1     14       +1.29      0.00    201.01           RANKING
  17      1     15       +1.65      0.00    175.50           RANKING
  18      1      1       +1.96      0.00    186.83           RANKING

Run time 3.909 sec
Idle time 0.817 sec

Lo scopo è quello di eseguire il loop su tutti i file .dlg e prendere la singola riga dalla tabella corrispondente alla sua prima riga (ignorando l'intestazione) ommettendo l'ultima colonna (normalmente prevista per il riconoscimento di grep). Nell'esempio sopra dalla tabella questa è la terza riga.

      1      1      7       -1.43      0.00    178.12

Quindi devo aggiungere questa riga a final_log.txt insieme al nome del file di registro (che dovrebbe essere specificato prima). Sulla base della mia esperienza molto recente, un possibile modello per il mio flusso di lavoro BASH (per la minaccia di diversi file) potrebbe essere:

#!/bin/bash
#name of the folder containing all *.dlg filles to be analysed
prot='7000'
#path to the folder with these *.dlg filles
FILES=$PWD/${prot}/*.dlg
#make a final log
echo 'This is a list of processed filles' > $PWD/final_results.log # we loop over all *.dlg filles in order to extract Clustering Histogram to the final LOG file for f in $FILES
do
  file_name2=$(basename "$f")
  file_name="${file_name2/.dlg}" echo "Processing of $f..."
  # here is an expression for GREP to take the line from the table and save it to >> $PWD/final_results.log
done

Risposte

vgersh99 Sep 30 2020 at 22:29

che ne dici di iniziare con - supponendo che gawk con il nextfilesupporto:

gawk '$1~/[[:digit:]]/{ print FILENAME, substr($0,1,match($0,/[[:blank:]]+[^[:blank:]]+$/)-1);nextfile}' *.dlg