bash tablodan ilk satırı çıkarıyor [kopya]

Oct 01 2020

Tablo modelleri için günlük dosyalarının tehdidi için ikinci bir soru. Workdir içinde bulunan çok sayıda dlg metin dosyasının analizi ile uğraşıyorum. Her dosyanın aşağıdaki biçimde bir tablosu (genellikle günlüğün sonunda bulunur) vardır:

 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

Amaç, tüm .dlg dosyalarının üzerinde döngü yapmak ve son sütunu (normalde grep tanıma için sağlanır) çıkararak ilk satırına karşılık gelen tablodan tek satırı almaktır (başlık göz ardı edilerek). Yukarıdaki tablodan örnekte bu üçüncü satırdır.

      1      1      7       -1.43      0.00    178.12

Sonra bu satırı final_log.txt dosyasına günlük dosyasının adıyla (önceden belirtilmesi gereken) eklemem gerekiyor. En son deneyimime dayanarak, BASH iş akışım için olası bir model (birkaç dosyanın tehdidi için) şunlar olabilir:

#!/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

Yanıtlar

vgersh99 Sep 30 2020 at 22:29

nasıl başlamalı - nextfiledestekle gawk varsayarsak :

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