在 shell 中将字符添加到文件的结尾和开头

Adding character just to end and beginning of file in shell

我有一堆大矩阵需要重新格式化,最好使用 shell。

假设我将此内容存储在 example.csv:

1,2,3
2,3,4
5,6,7

那我就

cat example.csv | tr ',' ' ' | awk '{print "["[=12=]"]"}'

获得

[1 2 3]
[2 3 4]
[5 6 7] 

但我需要我的最终格式看起来像这样

[[1 2 3]
 [2 3 4]
 [5 6 7]]

那么我如何使用 shell 和例如sed、awk 或类似的东西? IE。将 [ 添加到示例的开头并将 ] 附加到示例的最后一行?

假设我的 .csv 矩阵有几千列和几行。

只需 awk 即可处理:

awk -F, 'BEGIN{printf "["} NR>1{print ""} {=; printf "[%s]", [=10=]} 
       END {print "]"}' example.csv
[[1 2 3]
[2 3 4]
[5 6 7]]
  • BEGIN - 打印 [ 不换行
  • -F, 使用逗号作为字段分隔符
  • = 更改一些内容以告诉 awk 使用 OFS(默认情况下 space)以不同方式格式化输出
  • NR>{print ""} - 从第 2 条记录开始打印换行符
  • END - 打印 ] 和换行符

以防万一您对 sed 解决方案感兴趣

$ sed '1 s/^/[/; s/.*/[&]/; $ s/$/]/; s/,/ /g' input
[[1 2 3]
[2 3 4]
[5 6 7]]

另一个awk(读取文件两次)

awk -F, 'FNR==NR {a=NR;next}
         FNR==1 {[=10=]="["[=10=]} FNR==a {[=10=]=[=10=]"]"}
         {=;[=10=]="["[=10=]"]";print}' example.csv{,}
[[1 2 3]
[2 3 4]
[5 6 7]]