仍在处理古怪的文件(参见my previous post),我正在使用SED来清理一些如下所示的文件:
....Receiver ID = 028912781755
Serial Number = WD-WCAUH0546786
Current temp = 50C
PowerOnHours = 13166h
Receiver ID = 028920310381
Serial Number = WD-WCAUH0898333
Current temp = 51C
PowerOnHours = 9099h...
我的老板希望像这样的文件是tab(“\ t”)这样的分隔
Receiver ID = 028912781755 Serial Number = WD-WCAUH0546786 Current temp = 50C PowerOnHours = 13166h
这是我的sed代码:
sed -e '/.$/N; s/.\n/\t/'
它有效,但奇怪的是,并非无处不在。这是我得到的输出
Receiver ID = 028920310381 Serial Number = WD-WCAUH0898333
Current temp = 51 PowerOnHours = 9099h
=============================================== ======================= 我需要更具体。我得到的所有建议产生了相同的结果:它将所有内容单独添加到一行。不是我想要的。
我正在寻找:
Receiver ID = ...<tab>Serial Number = ...<tab>Current temp = ...<tab>PowerOnHours = ...<tab><carriage return>
Receiver ID = ...<tab>Serial Number = ...<tab>Current temp = ...<tab>PowerOnHours = ...<tab>
答案 0 :(得分:2)
awk 'ORS=/PowerOnHours/?RS:"\t"' ./infile
$ awk 'ORS=/PowerOnHours/?RS:"\t"' receiverid
Receiver ID = 028912781755 Special Field = foo bar baz Serial Number = WD-WCAUH0546786 Current temp = 50C PowerOnHours = 13166h
Receiver ID = 028920310381 Serial Number = WD-WCAUH0898333 Current temp = 51C PowerOnHours = 9099h
Receiver ID = 028912781755 Serial Number = WD-WCAUH0546786 Current temp = 50C PowerOnHours = 13166h
Receiver ID = 028920310381 Serial Number = WD-WCAUH0898333 Current temp = 51C PowerOnHours = 9099h
*请注意第一行特殊字段
awk 'ORS=NR%4?"\t":RS' ./infile
$ awk 'ORS=NR%4?"\t":RS' ./infile
Receiver ID = 028912781755 Serial Number = WD-WCAUH0546786 Current temp = 50C PowerOnHours = 13166h
Receiver ID = 028920310381 Serial Number = WD-WCAUH0898333 Current temp = 51C PowerOnHours = 9099h
Receiver ID = 028912781755 Serial Number = WD-WCAUH0546786 Current temp = 50C PowerOnHours = 13166h
Receiver ID = 028920310381 Serial Number = WD-WCAUH0898333 Current temp = 51C PowerOnHours = 9099h
答案 1 :(得分:1)
尝试一下:
sed '/^Receiver/N;N;N;s/\n/\t/g' inputfile
说明:
/^Receiver/N;N;N;
- 每次读取以“Receiver”开头的行时,请追加接下来的三行。s/\n/\t/g
- 使用标签示例输出:
Receiver ID = 028912781755 Serial Number = WD-WCAUH0546786 Current temp = 50C PowerOnHours = 13166h
Receiver ID = 028920310381 Serial Number = WD-WCAUH0898333 Current temp = 51C PowerOnHours = 9099h
(我夸大了标签的效果。)
答案 2 :(得分:1)
你可以使用awk
$ cat file
Receiver ID = 028912781755
Serial Number = WD-WCAUH0546786
Current temp = 50C
PowerOnHours = 13166h
Receiver ID = 028920310381
Serial Number = WD-WCAUH0898333
Current temp = 51C
PowerOnHours = 9099h...
$ awk 'BEGIN{RS="Receiver";OFS="\t"}NF>1{$1=$1;print "Receiver\t"$0}' file
Receiver ID = 028912781755 Serial Number = WD-WCAUH0546786 Current temp = 50C PowerOnHours = 13166h
Receiver ID = 028920310381 Serial Number = WD-WCAUH0898333 Current temp = 51C PowerOnHours = 9099h...
答案 3 :(得分:1)
sed ':a
N;/\nReceiver/{
P;D
}
s/\n/X/;ta'
答案 4 :(得分:0)
如上所述,将第二行连接到第一行,然后转到第三行并将第四行连接到它等等。
sed ':b; /^$/n; N; s/.\n\(.\)/\t\1/; tb'
应该循环追加非空行。 (更正为在运行中实际捕获空白行。)
答案 5 :(得分:0)
cat file | tr '\n' '\t'
也会工作