sdibt705107375
sdibt705107375
采纳率100%
2019-09-22 14:43

sh脚本怎么循环读取文件的每一行,切割并且赋值给不同的变量呢?

20
已采纳

有一个文件知道它的路径,里面有下面这些内容,
123456
233445
244556
想用sh脚本做一个 循环读取这个文件的每一行,(只需要读取文件第一个字符是2的,第一条1的不读取)
然后吧读到的内一行的内容进行切割
第2-3个字符 赋值给一个变量
第4-5个字符 赋值给另外一个变量
第6个字符 再赋值给一个变量
字符每行的位置是固定的
请问各位大神怎么实现?sh脚本从来没有接触过,最好麻烦帮忙注释一下,菜鸟可能看不懂,谢谢了!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • infoworld infoworld 2年前

    其实查一查shell的读取文件, 字符串处理, 再调试下就可以得到答案.

    #!/bin/bash
    #
    # This program reads lines from a file.
    #
    
    end_of_file=0
    while [[ $end_of_file == 0 ]]; do
      read -r line
      # the last exit status is the 
      # flag of the end of file
      end_of_file=$?
    
      if [[ ${#line} -gt 0 ]]; then
         echo "$line, length is: ${#line}"
         first=${line:0:1}
         if [[ $first == "1" ]]; then
            a1=${line:1:2}
            a2=${line:3:2}
            a3=${line:5:1}
            echo $a1,$a2,$a3
         fi
      fi
    done < "$1"
    

    输出

    $ sh build.sh readme.txt
    123456, length is: 6
    23,45,6
    233445, length is: 6
    244556, length is: 6
    
    

    参考:
    shell脚本中变量的赋值

    linux shell中 if else以及大于小于等于逻辑表达式介绍

    Shell字符串操作大全

    shell脚本中字符串常用操作整理

    read-a-file-line-by-line-assigning-the-value-to-a-variable

    linux shell 字符串操作详解

    点赞 评论 复制链接分享
  • dabocaiqq dabocaiqq 2年前

    substr函数

    (1)awk中函数substr substr(源字符串,开始索引,长度) 开始索引以0开始

    示例:

    awk ‘{$a=substr($0,0,2);print $a;}’ filename 假设文件中为只有一行为abcdefg,则返回结果为ab

    (2)expr substr 字符串 开始索引 长度 开始索引以1开始

    示例:

    expr substr “abc” 2 2 显示bc

    (3)echo ${str:开始索引} 或 echo ${str:开始索引:长度} 开始索引为0

    示例:

    str=“abc” echo ${str:1},显示bc echo ${str:1:2},显示bc

    点赞 1 评论 复制链接分享