我有这个输入:
{"title : ", "link : ", ...}
我想要使用sed命令输出
1 a
a
2 b b
3 c
c
4 d d
5 e e
6 f
f
7 g
g
我正在尝试未成功
1 a a
2 b b
3 c c
4 d d
5 e e
6 f f
7 g g
答案 0 :(得分:1)
另一个awk:
$ awk 'BEGIN{RS=""}{for(i=1;i<=NF;i+=3)print $i,$(i+1),$(i+2)}' file
1 a a
2 b b
3 c c
4 d d
5 e e
6 f f
7 g g
解释:
$ awk 'BEGIN {
RS="" # prime awk to read in a paragraph of data
}
{
for(i=1;i<=NF;i+=3) # jump forward 3 fields at a time
print $i,$(i+1),$(i+2) # print 3 fields
}' file
答案 1 :(得分:1)
awk 'NR>1 && /^[0-9]/ {print substr(s,2); s=""} {s=s FS $0} END {print substr(s,2)}' file
NR>1 && /^[0-9]/
:如果一行不是第一行且以数字开头,{print substr(s,2); s=""}
:在没有前导空格的情况下打印“ s”,然后清除它。{s=s FS $0}
:在每一行上,将当前行附加到“ s”的值上。 FS
默认为空格。 edit :添加了END
条件以赶上最后一行,讨厌它,做出更好的单独答案。
答案 2 :(得分:0)
这可能对您有用(GNU sed):
sed '/^[0-9]/{:a;N;s/\n\([^0-9]\)/ \1/;ta;P;D}' file
如果当前行以整数开头,请追加以下行。如果该行不是以整数开头,则用空格替换换行并重复。否则,打印/删除图案空间中的第一行并重复。
答案 3 :(得分:0)
使用awk
使其更简单:
awk 'NF==2 {printf("%s ", $0); next} 1' file
基本上,“如果只有 个正好两个字段,则不要打印换行符。”