прочитайте предыдущую строку, используя bash - PullRequest
0 голосов
/ 14 октября 2019

Используя цикл while, я читаю файл, скажем:

string1
string2
string3
string4
string5
string6

Что происходит, потому что я читаю string1 и string2 в первой итерации цикла while, начинается вторая итерацияв строке 3 третья итерация начинается в строке 5 ... ect

Я пытался найти возможные флаги, которые могут иметь значения для чтения, но это не так. Я также попытался $ Line1 = $ Line2, надеясь, что смогу указать, какую строку я хотел бы прочитать

Вот как выглядит мой цикл ...

while read line1
do
  read line2
done

Я читаю string1 иstring2 в первой итерации цикла, во второй итерации я бы хотел прочитать string2 и string3 цикла, 3-й итерации string3 и string4 цикла ect ..... Есть ли способ указать, какую строку я бы хотелчитать? Есть ли способ прочитать предыдущую строку или «сбросить» мой указатель чтения, вернуться назад?

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Вы можете сделать это, сохранив предыдущую строку.

#!/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
0 голосов
/ 14 октября 2019

Вы можете попробовать это, сохранив весь файл в массиве.

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

здесь echo $ {# b [@]} возвращает длину массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...