我正在使用此SE数据查询的.csv
输出,它看起来像这样(仅包含5022个条目):
"{
""id"": 281952,
""title"": ""Flash 11.2 No Longer Supported by Google Play""
}"
"{
""id"": 281993,
""title"": ""Netbeans won't open in Ubuntu""
}"
(它的行^M
尾在[number]和““ title”“之间)。我需要它看起来像这样:
281952,Flash 11.2 No Longer Supported by Google Play
281993,Netbeans won't open in Ubuntu
我在某个文本编辑器中修复了该问题,该编辑器将很容易保持匿名,但是我想创建一个脚本,这样我就不必在每次刷新查询时都再次执行此操作,因此其他人可以使用它。我用过sed
...
这一系列命令可以完美地工作(尽管效率可能很低;这只是一个反复试验的解决方案):
# Print the ^M and remove them, write to a new file:
cat -v QueryR* | sed 's/\^M//' > QueryNew
# remove all the other junk:
sed -i 's/{//' QueryNew
sed -i 's/}//' QueryNew
sed -i 's/""//g' QueryNew
sed -i 's/^"//' QueryNew
sed -i '/,/{N;/\n.*title:\s/{s/,\n.*title:\s/,\ /}}' QueryNew
sed -i 's/^\s\+//' QueryNew
sed -i '/^\s*$/d' QueryNew
sed -i 's/^id:\ //' QueryNew
sed -i 's/,\ /,/' QueryNew
sed -i 's/\\//g' QueryNew
那么,为什么不呢?只有^M
和{}
被删除,其他所有内容仍然存在。
#!/bin/bash
cat -v QueryR* | sed 's/\^M//' > QueryNew
sed -i '{
s/{//
s/}//
s/""//g
s/^"//
/,/{N;/\n.*title:\s/{s/,\n.*title:\s/,\ /}}
s/^\s\+//
/^\s*$/d
s/^id:\ //
s/,\ /,/
s/\\//g
}' QueryNew
我确定我的错误确实很明显...
\r
。jq
在标题字段带有冒号的第一行(第一行)中断。我仍然不确定为什么sed
讨厌我,但是我取消了一些引号,\r
在这一行中/,\r*/{N;/\n.*title.*:\s/{s/,\r*\n.*title.*:\s/,\ /}}
,最后它像这样工作。非常感谢^ _ ^