bash脚本;在表格中逐行搜索文件以获取阈值,然后打印到文件或标准输出中

时间:2018-07-30 14:42:34

标签: bash

Linux newbe;

我有一个包含100多个目录的目录,每个目录都有一个内容相似的文件。

------------------------------------------------------------------------------


 Final Restraint Analysis for coords: md.rst


 Restraints, deviations, and energy contributions:    pencut =   -0.00

 ------------------------------------------------------------------------------
     First atom        Last atom    curr. value target deviation  penalty
 ------------------------------------------------------------------------------
 *H43  BOC    1 --  H    ALA    2:    4.506    4.760    0.000    0.000 d    0: 0

在这些文件中,有以下几行,如最后一行。我需要在每行中搜索阈值的列罚值,如果大于该行,则应打印到stdout或文件中。 我从使用cut开始,但在定界符方面遇到了麻烦,即使我会剪切正确的行文,我也不知道如何保存行号并将此行打印到文件或stdout。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

在很多帮助下,我终于有了解决方案:

#! /bin/bash
cutoff=5.0
for i in sim_results_rep*; do

while read -r LINE; do
echo $LINE | grep 'First atom' > /dev/null
if [ $? -ne 0 ]
then
  continue 
else
 read -r LINE 
    while true; do 
      read -r LINE
      echo $LINE | grep 'Total distance penalty' > /dev/null
      if [ $? -ne 0 ] 
      then
       x=`echo "$LINE" | awk '{print $11}'` 
    if [ `echo "$x > $cutoff" | bc` == 1 ] 
    then
      echo "In file $i, the follwing distance has a penalty higher than $cutoff"
      echo $LINE
    else
      continue 

    fi

  else 
    break
    fi

  done
  break 
fi

done < $i/*.nmrout

done