【发布时间】:2017-07-03 13:49:30
【问题描述】:
我正在尝试使用 bash 解析许多日志文件。日志文件如下所示:
"",1/8/2016
"Timezone",-6
"Serial No.","000001"
"Location:","LS_trap_2c"
"High temperature limit (�C)",-20
"Low temperature limit (�C)",-40
"Date - Time","Temperature (�C)"
"8/11/2015 12:00",28.0
"8/11/2015 14:00",28.5
"8/11/2015 16:00",24.0
"",1/8/2016
"Timezone",-6
"Serial No.","000002"
"Location:","LS_trap_2D"
"High temperature limit (�C)",-20
"Low temperature limit (�C)",-40
"Date - Time","Temperature (�C)"
"8/11/2015 12:00",28.0
"8/11/2015 14:00",28.5
我想将序列号和位置(以后可能还有其他)附加到每一行,直到到达下一个标题,并将其输出到master.csv 文件。该文件最终应如下所示:
"",1/8/2016
"Timezone",-6
"Serial No.","000001"
"Location:","Trap_2c"
"High temperature limit (�C)",-20
"Low temperature limit (�C)",-40
"Date - Time","Temperature (�C)"
LS_trap_2c,000001,"8/11/2015 12:00",28.0
LS_trap_2c,000001,"8/11/2015 14:00",28.5
LS_trap_2c,000001,"8/11/2015 16:00",24.0
"",1/8/2016
"Timezone",-6
"Serial No.","00002"
"Location:","LS_trap_2D"
"High temperature limit (�C)",-20
"Low temperature limit (�C)",-40
"Date - Time","Temperature (�C)"
LS_trap_2D,00002,"8/11/2015 12:00",28.0
LS_trap_2D,00002,"8/11/2015 14:00",28.5
这是一个帮助我使用 bash sed 处理类似文件的问题:
Bash Append header information to each line of a file until next header found
这个oneliner非常适合查找标题,将其存储在holdspace中并将其添加到每行的前面
sed -r '/^"/h;//!{G;s/(.*)\n.*"(.*)"/\2,\1/}' fil.csv >masfil.csv
这种方法不适用于将多个字符串附加到前面,因为我不确定如何在 sed 中使用多个保留空间。另外,我不确定 sed 是否是最好的方法。我对 sed 不是很熟悉,所以任何指针都将不胜感激。
【问题讨论】: