在 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]]
我有一堆大矩阵需要重新格式化,最好使用 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]]