我有一堆大型矩阵需要重新格式化,理想情况下使用shell。
假设我将此内容存储在example.csv中:
1,2,3
2,3,4
5,6,7
然后我做
cat example.csv | tr ',' ' ' | awk '{print "["$0"]"}'
获取
[1 2 3]
[2 3 4]
[5 6 7]
但我需要我的最终格式看起来像
[[1 2 3]
[2 3 4]
[5 6 7]]
那么如何使用shell来实现这一目标,例如sed,awk或类似的东西?即将[
添加到示例的开头并将]
附加到示例的最后一行?
想象一下,我的.csv矩阵有几千列和一行。
答案 0 :(得分:5)
以防您对sed
解决方案感兴趣
$ sed '1 s/^/[/; s/.*/[&]/; $ s/$/]/; s/,/ /g' input
[[1 2 3]
[2 3 4]
[5 6 7]]
答案 1 :(得分:4)
只是awk可以处理这个:
awk -F, 'BEGIN{printf "["} NR>1{print ""} {$1=$1; printf "[%s]", $0}
END {print "]"}' example.csv
[[1 2 3]
[2 3 4]
[5 6 7]]
BEGIN
- 无新线打印[
-F,
使用逗号作为字段分隔符$1=$1
更改内容以告诉awk使用OFS
(默认为空格)以不同方式格式化输出NR>{print ""}
- 为记录#2打印换行END
- 打印]
和换行符答案 2 :(得分:2)
另一个awk
(两次阅读文件)
awk -F, 'FNR==NR {a=NR;next}
FNR==1 {$0="["$0} FNR==a {$0=$0"]"}
{$1=$1;$0="["$0"]";print}' example.csv{,}
[[1 2 3]
[2 3 4]
[5 6 7]]