【问题标题】:awk print output as variable/array not staying formattedawk 打印输出为变量/数组不保持格式化
【发布时间】:2023-03-24 02:19:02
【问题描述】:

我的目标是获取 awk 打印命令的输出(同时保留格式)并使用它来替换文件中的某些文本。
目前我正在使用:

declare -a mach=($(awk -F',' 'NR>1{print NR-1, $8}' mag_grad.csv)) 

给出:

1 0.77492
2 0.18022
3 0.29596
4 0.5229

等等……

我正在尝试使用 sed 在文件中查找和替换带有数组 $mach 的文本,具有相同的 2 列格式。

sed -i s/"mach data"/"${mach[*]}"/g nodedata.txt

但是这样做的结果是将马赫数据替换为

1 0.77492 2 0.18022 3 0.29596 4 0.5229 .......

关于如何保留格式的任何想法?

干杯

【问题讨论】:

  • 你想做什么?您想保留输出中的换行符吗?如果是这样,您为什么要使用一个将所有内容拆分并删除所有空格的数组?
  • 我对任何类型的脚本都很陌生,所以如果我用错了东西,我深表歉意。是的,我想保留输出中的新行,以为我必须将其设置为数组,而不是变量。但是,每当我尝试使用带有 mach 的 sed 作为变量而不是数组时,它不会用正确的数据替换单词,只是单词“mach”

标签: arrays bash awk sed


【解决方案1】:

尝试:

mach=$(awk -F',' 'NR>1{print NR-1, $8}' mag_grad.csv)
sed -i "s/\x22mach data\x22/${mach//$'\n'/\\n}/" nodedata.txt

【讨论】:

  • 试过了,它只是用单词 mach 替换了“mach data”,而不是变量 mach 不幸的是
  • 我会为此使用 perl:替换文本中的换行符没有问题:perl -i -pse 's/mach data/$data/g' -- -data="$mach" filename
猜你喜欢
  • 1970-01-01
  • 2013-03-08
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
相关资源
最近更新 更多