使用 bash 命令更改分隔符并重组文件

使用 bash 命令更改分隔符并重组文件

我有一个巨大的数据文件,其中包含两种类型的数据。其中一个是这样的:

$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 测试。

相关内容