如何在某个字符后插入逗号,但不为最后一条记录插入逗号。
我有数据
[
{"ID": 12345}
{"ID": 67891}
{"ID": 14785}
]
所以我试图在}
除最后一个之外的每个后面插入一个逗号。
所以更新应该是这样的:
[
{"ID": 12345},
{"ID": 67891},
{"ID": 14785}
]
有人可以帮我解决这个问题吗?
答案1
$ awk '/^{/ { if (lastline ~ "}$") lastline=lastline ","; print lastline; }; '\
'! /^{/ && NR>1 { print lastline; }; { lastline=$0; }; '\
'END { print lastline; }' inputfile
[
{"ID": 12345},
{"ID": 67891},
{"ID": 14785}
]
[
{"ID": 12345},
{"ID": 67891},
{"ID": 14785}
]
答案2
Perl 一行:
$ perl -a -F"\n" -ne 'BEGIN{$/="]";} print $F[0]."\n" if $. == 1; map { ($F[$_] =~ /[\[\]]/) || ($_ == @F-2) ? print $F[$_]."\n" : print $F[$_].",\n"; } (1 .. @F-1) ' file
[
{"ID": 12345},
{"ID": 67891},
{"ID": 14785}
]
[
{"ID": 12345},
{"ID": 67891},
{"ID": 67891},
{"ID": 14785}
]
输入文件:
$ cat file
[
{"ID": 12345}
{"ID": 67891}
{"ID": 14785}
]
[
{"ID": 12345}
{"ID": 67891}
{"ID": 67891}
{"ID": 14785}
]
答案3
或者与tr
和sed
tr "\n" "|" < file | sed "s/}|{/},|{/g" | tr "|" "\n" file
甚至
tr "\n" "|" < file | sed "s/}|{/},\n{/g; s/|/\n/g"
如果您不使用,线路长度可能会受到限制GNUsed