bash 文件中行的值序列
sequence of values from line in file in bash
我有包含以下内容的文件:
id=123
time=1440367263
from=user1
version=none
final=none
id=124
time=1440367264
from=user2
version=none
final=none
etc...
但是,有时缺少 "from" 或 "final" 行,这会破坏序列。
示例:
id=123
time=1440367263
from=user1
version=none
final=none
id=124
time=1440367264
version=none
final=none
etc...
问题是,我正在尝试从中生成单行,根据示例 1,我生成的输出如下:
id=123 time=1440367263 from=user1 version=none final=none
id=124 time=1440367264 from=user2 version=none final=none
如果缺少某些值,则会破坏每行的顺序。
id, time, from, version, final
我如何维护这些顺序,如果有缺失值,请添加 =0 值以保持顺序?
如有任何帮助,我们将不胜感激,
谢谢,
AL.
没有神奇的单行解决方案,您需要创建一个自定义脚本,例如:
- 将 5 个变量(id、时间、来源、版本和最终)重置为值
0
- 从文件中读取行,直到读取到以 "final" 开头的行(假设 final 始终存在...)。
- 当你读取行时,填充相应的变量
- 最终打印出包含您读取的变量的行
并循环直到文件结束。
像这样:
awk -F= '
function report() {
printf("id=%s time=%s from=%s version=%s final=%s\n",
a["id"], a["time"], a["from"], a["final"])
}
function reset() {
# Make sure the array a is empty
delete a
# Defining the fields in which we are interested
a["id"]=a["time"]=a["from"]=a["version"]=a["final"]=0
}
=="id" {
if ("id" in a) report()
reset()
}
in a {a[]=} # Storing key + value
# if we are interested in a field
' file
编辑:重新设计,据我了解现在的要求:)
我想 id
总是存在,我在它之前插入一个换行符
cat r |tr '\n' ' '|sed -r 's/(id=[^ ]+)/\n/g';echo
输出
id=123 time=1440367263 from=user1 version=none final=none
id=124 time=1440367264 version=none final=none
我有包含以下内容的文件:
id=123
time=1440367263
from=user1
version=none
final=none
id=124
time=1440367264
from=user2
version=none
final=none
etc...
但是,有时缺少 "from" 或 "final" 行,这会破坏序列。 示例:
id=123
time=1440367263
from=user1
version=none
final=none
id=124
time=1440367264
version=none
final=none
etc...
问题是,我正在尝试从中生成单行,根据示例 1,我生成的输出如下:
id=123 time=1440367263 from=user1 version=none final=none
id=124 time=1440367264 from=user2 version=none final=none
如果缺少某些值,则会破坏每行的顺序。 id, time, from, version, final
我如何维护这些顺序,如果有缺失值,请添加 =0 值以保持顺序?
如有任何帮助,我们将不胜感激,
谢谢, AL.
没有神奇的单行解决方案,您需要创建一个自定义脚本,例如:
- 将 5 个变量(id、时间、来源、版本和最终)重置为值
0
- 从文件中读取行,直到读取到以 "final" 开头的行(假设 final 始终存在...)。
- 当你读取行时,填充相应的变量
- 最终打印出包含您读取的变量的行
并循环直到文件结束。
像这样:
awk -F= '
function report() {
printf("id=%s time=%s from=%s version=%s final=%s\n",
a["id"], a["time"], a["from"], a["final"])
}
function reset() {
# Make sure the array a is empty
delete a
# Defining the fields in which we are interested
a["id"]=a["time"]=a["from"]=a["version"]=a["final"]=0
}
=="id" {
if ("id" in a) report()
reset()
}
in a {a[]=} # Storing key + value
# if we are interested in a field
' file
编辑:重新设计,据我了解现在的要求:)
我想 id
总是存在,我在它之前插入一个换行符
cat r |tr '\n' ' '|sed -r 's/(id=[^ ]+)/\n/g';echo
输出
id=123 time=1440367263 from=user1 version=none final=none
id=124 time=1440367264 version=none final=none