我有一个巨大的数据文件,其中包含两种类型的数据。其中一个是这样的:
$1 = {281.95849185110393, 336.27948244115851, 279.66401201832105, 328.55431033520654, 278.06462879690559, 325.86321739815691}
我想删除$1 = {
}
文件中的所有值并将其作为单个列放入其中:
281.95849185110393
336.27948244115851
279.66401201832105
328.55431033520654
278.06462879690559
325.86321739815691
另一种数据类型是:
$2 = {{-3691.7051951760536, 27.470513409955384, 25006.562760859793}, {-49869.618501644189, -7688.9232143687505, 241816.98281996409}}
我想删除$2 = {
}
并将每个转换{n1,n2,n2}
为(n1 n2 n3)
并再次转换为单个列。
因此最终的输出将是:
(-3691.7051951760536 27.470513409955384 25006.562760859793)
(-49869.618501644189 -7688.9232143687505 241816.98281996409)
哪个 Bash 函数能够解决这个问题?
答案1
sed
虽然命令很丑陋,但用 bash 来做并不容易,但也不太难。
sed -e '/$1/s/}$//g' -e '/$1/s/, /\n/g' -e 's/$1 = {//' \
-e '/$2/s/}}/)/' -e '/$2/s/}, {/)\n(/g' -e 's/$2 = {{/(/' filename
sed
此处运行六个表达式。前三个表达式仅适用于以“$1”开头的行,并按顺序删除最后的 },然后用换行符替换“, ”,然后删除“$1 = {”。后三个表达式适用于 $2 行,用 } 替换最后的 }},用“}\n 替换“}, ”,然后删除“$2 = {”。
使用 GNU sed v4.2.2 测试。