Bash 将连续的文本行读入不同的变量?
我有一个如下格式的日志文件:Bash 将连续的文本行读入不同的变量?,bash,variables,text,Bash,Variables,Text,我有一个如下格式的日志文件: $ cat log.txt -- John Smith 12.34.56.78 Mon Nov 06, 2017 6:48 pm -- Jane Doe 23.34.56.78 Mon Nov 06, 2017 6:49 pm 。。。等等,几千次。始终以4行为一组 我试图创建一个循环,可以将每一行读入一个特定的变量,这样我就可以对它做一些事情,然后对每个组重复这个过程 这不起作用,但我希望我在正确的轨道上回声只是检查它是否正常工作: while read sepa
$ cat log.txt
--
John Smith
12.34.56.78
Mon Nov 06, 2017 6:48 pm
--
Jane Doe
23.34.56.78
Mon Nov 06, 2017 6:49 pm
。。。等等,几千次。始终以4行为一组
我试图创建一个循环,可以将每一行读入一个特定的变量,这样我就可以对它做一些事情,然后对每个组重复这个过程
这不起作用,但我希望我在正确的轨道上回声只是检查它是否正常工作:
while read separator username ip datetime; do
echo "separator: [$separator]"
echo "username: [$username]"
echo "ip: [$ip]"
echo "datetime: [$datetime]"
done < log.txt
如何修改read以将整个文本行视为单个变量?那么下一行作为不同的变量
多谢各位
编辑:哇,在其他人认为这是一个与现有问题完全相同的问题之前,你先读一下怎么样?不是 啊,阵列。好主意我以前从未使用过mapfile,所以现在是开始的好时机DNo,页面上显示的内容与我的示例案例不匹配。不过还是谢谢你
while mapfile -t -n 4 blocks && ((${#blocks[@]})); do
echo "separator: [${blocks[0]}]"
echo "username: [${blocks[1]}]"
echo "ip: [${blocks[2]}]"
echo "datetime: [${blocks[3]}]"
done < log.txt