我正在尝试从日志文件中解析数据。
这是数据文件:
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
不要使用 shellwhile 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 循环...
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 -