如何从给定文件中逐行读取?

时间:2017-11-06 22:23:58

标签: bash

我写了一个脚本,在这个脚本中我编写了一个接受类似id的参数的函数,并且在我从一个给定文件中逐行读取的函数中,文件行格式是:

  

id_num name number_of_brothers other_people_id(可选)   (也可以在每两个单词之间和开头之间有多个空格)

例如:

  

236501 james show 3 234247 234125

(id号码必须只包含6位数字,名称最后可以有一个数字,但兄弟的数量必须在0-10之间) 在这个例子中,名称是:" james show" 另一个例子:

  

236501 james show 3 4 234247 234125

这次的名字是" james显示3" 现在我想逐行阅读并查看哪一行以给定参数开头并打印名称..

!现在为了从给定文件中逐行读取我使用的实线,最后我做了done < "$given_file"

但是当我从bash运行脚本时,我得到了这个错误:

  

意外令牌附近的语法错误`}&#39;   我在脚本中使用的以下函数的最后一行中得到此错误:

function get_name{
  while read -a line; do
  l=`echo $line`               
  if [[ `grep ^"$1" "$line"` != " " ]]; then  
   l=`cut -d" " -f2-`   
    i=1
    while(( i>0 )) ; do
      if (( ${line[i]}>=0 && $${line[i]}<11 && ( ${line[i+1]} == " " || `get_num ${line[i+1]}` == 6 ))) ; then 
         l=`cut -d " " -f1-i`
         echo "$l"
         break
     fi
    let i++
    done
  fi
  done < "$given_file"

}  ## here i get the error

我在阅读文件时做错了什么?

1 个答案:

答案 0 :(得分:1)

如果你只是想完成这项工作,那就不过是一个班轮。

function get_name {
    sed -n -r "s/^$1 (.*) [0-9]{1,2}( [0-9]{6})*/\1/p" "$given_file"
}

测试

$ echo 236501 james show 3 4 234247 234125 | sed -n -r 's/^236501 (.*) [0-9]{1,2}( [0-9]{6})*/\1/p'
james show 3