로그 파일의 데이터를 구문 분석하려고 합니다.
다음은 데이터 파일입니다.
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 -