linux - 将一行与其以下行进行比较
问题描述
我有一个名为的文件file.txt
,其中包含以下格式的数据:
John
file
Abr
John
Tutu
我可以使用以下方式逐行读取文件:
#!/bin/sh
while read fl
do
echo $fl
done < file.txt
但我想用以下几行打印一行
我尝试了脚本:
#!/bin/sh
prev=""
while read fl; do
prev="$fl"
done < file.txt
但是这个脚本只用连续的行来做事情。请提出一些更好的解决方案。
预期输出:
John file
John Abr
John John
John Tutu
then
file Abr
file John
file Tutu
then
Abr John
Abr Tutu
then
John Tutu
解决方案
awk 的空 RS 可能适合您的数据:
awk -F '\n' -v RS= '{for (i=1;i<NF;++i) for (j=i+1;j<=NF;++j) print $i,$j}' file
推荐阅读
- python - 来自 XML 的 Python 数据库更新仅更新最后一条记录
- wordpress - 在 WordPress 中加载页面时启动会话
- java - 如何覆盖 findElements 方法,使其返回实现 WebElement 接口的类型列表
- sql-server - FastReport:如何更改数据字段显示的小数位数
- apache-spark - 如果我想运行 1 到 5 分钟的不是 SparkStreaming 的 pysparkJob 批处理,我应该运行什么命令?
- swift - 我想做一个可以在后台快速继续的下载,但是当我切换到后台时,蓝牙文件传输停止
- php - 如何在 WordPress 帖子编辑屏幕的元框中显示自定义帖子类型的自定义字段值
- r - 我在尝试将多个 XLS 表导出到 R 中自己的 csv 文件时遇到问题
- php - 在表单和提交按钮之前调用 php 查询
- java - Spring Data Streamable vs Stream