Whileループ - 一度に2行を読み込みます。

Whileループ - 一度に2行を読み込みます。

ログファイルのデータを解析しようとしています。

以下はデータファイルです。

Data1
Data2
Data3
Data4

私のコードは次のとおりです。

data=$(cat datafile)
echo "$data" | while read line; read line1;
do
    echo "$line and $line1"
done

私が望む出力は次のとおりです。

Data1 and Data2
Data2 and Data3
Data3 and Data4

しかし、私が得るものは次のとおりです。

Data1 and Data2
Data3 and Data4

私はなぜこのように振る舞うのか理解していますが、私が望む方法で何をすべきかわかりません。あなたはコツを知っている人ですか?

ありがとう

答え1

while readテキストを処理するためにシェルループを使用しないでください。ここで最も簡単なのは次のとおりですawk

awk 'NR > 1 {print prev, "and", $0}; {prev = $0}' < datafile

または以下を使用してsed

sed 'x; 1d; G; s/\n/ and /' < datafile

答え2

どのくらい行くのでしょうか?

{ read line
  while read line1
  do
     echo $line and $line1
     line=$line1
  done
 } < datafile 

Data1 and Data2
Data2 and Data3
Data3 and Data4

わかりますか?

答え3

もう一つの間、読み込みループ...

while read -r line; do 
  printf '%s and %s\n' "$line" "$line"
done < data

または

while read -r line <&3; do 
  read -r line1
  printf '%s and %s\n' "$line" "$line1"
done 3< data < data

または bash4+ マッピングファイル

mapfile -t array < data

for i in "${!array[@]}"; do 
  printf '%s and %s\n' "${array[$i]}" "${array[$i]}"
done

答え4

ファイルをレプリカに貼り付け、最初の行を削除しました。

$ tail -n+2 datafile | paste datafile -

関連情報