【问题标题】:read previous line using bash使用 bash 读取上一行
【发布时间】:2019-10-14 15:00:16
【问题描述】:

使用 while 循环,我正在读取一个文件,比如说:

string1
string2
string3
string4
string5
string6

发生的事情是因为我在 while 循环的第一次迭代中读取了 string1 和 string2,第二次迭代从 string3 开始,第三次迭代从 string5 开始......等等

我已经尝试寻找读取可能具有的可能标志,但情况似乎并非如此。我也试过 $Line1=$Line2 希望我可以指定我想读哪一行

这是我的循环的样子...

while read line1
do
  read line2
done

我在循环的第一次迭代中读取 string1 和 string2,在我的第二次迭代中我想读取循环的 string2 和 string3,第三次迭代的循环 string3 和 string4 等等.....有没有办法指定我想阅读哪一行?有没有办法读取上一行或“重置”我的读取指针,向后退?

【问题讨论】:

    标签: linux bash


    【解决方案1】:

    你可以通过存储上一行来做到这一点。

    #!/bin/bash
    prev=
    while read line
    do
        if [ ! -z "${prev}" ];then
            line1="${prev}"
            line2="${line}"
            echo "${line1}  ${line2}"
        fi
        prev="${line}"
    done
    
    string1  string2
    string2  string3
    string3  string4
    string4  string5
    string5  string6
    

    【讨论】:

    • 关于 [ ! -z "${prev}" ]
    【解决方案2】:

    您可以尝试将所有文​​件存储在一个数组中。

    #!/bin/bash
    b=(`cat filename`)
    for i in $(eval echo {0..$[${#b[@]}-2]})
    do
    echo "${b[i]} ${b[i+1]}"
    done
    

    这里echo ${#b[@]}返回数组的长度。

    【讨论】:

      猜你喜欢
      • 2018-03-26
      • 1970-01-01
      • 2022-01-11
      • 2018-09-05
      • 2018-03-08
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多