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

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

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 字符串操作详解

infoworld
infoworld 回复sdibt705107375: [http://c.biancheng.net/cpp/view/6994.html(http://c.biancheng.net/cpp/view/6994.html)
6 个月之前 回复
infoworld
infoworld 回复sdibt705107375: 读取文本就是end_of_file=0 while [[ $end_of_file == 0 ]]; do read -r line ... done < "$1" 这个符号是传入的参数1的意思$1,我建议你看下shell基础.
6 个月之前 回复
infoworld
infoworld 回复sdibt705107375: shell脚本保存为build.sh,分析的文件是readme.txt,调用方式sh build.sh readme.txt
6 个月之前 回复
sdibt705107375
sdibt705107375 麻烦问下 读取文件的位置是哪部分代码呢? 读取的路径和文件名不需要写么?
6 个月之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问