bash - 需要读取文件并在两个空行之间抓取每个文本块
问题描述
需要可以获取每两行并存储在变量中的while循环。
while read data; do
echo $data
done
所以我需要为每个文本块做一些事情,每个文本块是两行。
解决方案
知道您想对这两行做什么会有所帮助,但是您可以使用 很容易地收集每个由空行包围的 2 块awk
,例如
awk '
NF==0 { n=0; next }
n<2 { arr[++n]=$0 }
n==2 { printf "do to: %s & %s\n",arr[1],arr[2]; n=0 }
' file
或作为 1-liner:
awk 'NF==0{n=0;next} n<2{arr[++n]=$0} n==2{printf "do to: %s & %s\n",arr[1],arr[2]; n=0}' file
如果您有 3 条规则,则第一个规则检查该行是否为空NF==0
,如果是,则将索引n
设置为零并跳到next
记录(行)。第二个检查是n<2
将当前行添加到数组arr
中。最终规则是对anen==2
中包含的行执行任何您需要的操作,然后将索引重置为零。arr[1]
arr[2]
n
示例输入文件
无耻地从另一个答案中借用并修改(谢谢),您可以:
$ cat file
some text here
some text here a
some text here 2
some text here 2a
示例使用/输出
收集由空格分隔的每 2 行,然后以"do to: "
前缀输出,行由 连接" & "
,仅用于示例目的:
$ awk 'NF==0{n=0;next} n<2{arr[++n]=$0} n==2{printf "do to: %s & %s\n",arr[1],arr[2]; n=0}' file
do to: some text here & some text here a
do to: some text here 2 & some text here 2a
根据您需要对线路做什么,awk
可能会提供一个非常有效的解决方案。(可能sed
)
推荐阅读
- laravel - 如何将数据从控制器传递到 Laravel 6.5 中的“之后”中间件
- python - 如何从重定向 url 获取访问令牌
- sql - 使用 SQL 查询搜索相似地址
- javascript - 使用正则表达式格式化日期
- python - 标准标签的 PyYAML 替代构造函数
- python - 获取基于字段的大型对象列表的最有效组合
- android - 应用程序处于后台一段时间后,前台服务暂停/休眠
- python - 如何在 SQLite Flask 中使用带有位置参数的 % 符号执行 SELECT 查询?
- php - 从 MySQL/PHP 修复 JSON 格式
- javascript - 详细的堆栈跟踪:错误:找不到模块“条带”