连接变量无法按我想要的方式工作



我需要连接两个变量和一个字符

第一个变量$lineline=$(awk "NR==$i" in_parameters.txt) 从文件中读取。

echo $line
2;0.250;0.250;1.520;0.000;0.025;32

第二个变量也是从文件中读取的

extr_out=$(awk "NR==1" "${i}_out.txt")
echo $extr_out
0.249510039979791

我想要的是创造line2= $line + ";" + $extr_out

echo $line2
2;0.250;0.250;1.520;0.000;0.025;32;0.249510039979791

我试过使用

line2=$line
line2+=";"
echo $line2
;;0.250;0.250;1.520;0.000;0.025;32

line2=$line$extr_out
echo $line2
  0.2495100399797910;0.000;0.025;32

但问题是该值写在链的开头,而不是附加在末尾。

我可能没有正确理解某些东西。有人可以帮我吗?bash 如何处理这些变量?

您的文件in_parameters.txt具有 Windows 行尾 (CR-LF),因此当您使用 awk 提取整行时,该行以回车符结束。因此,当您将某些内容附加到行尾时,您将其放在回车符之后,因此它会覆盖行首的文本。

使用dos2unix删除CR,您应该没问题。(您可能还需要检查其他数据文件。

这样连接?

$ line='2;0.250;0.250;1.520;0.000;0.025;32'
$ extr_out='0.249510039979791'
$ line2=$(echo "$line;$extr_out")
$ echo "$line2"
2;0.250;0.250;1.520;0.000;0.025;32;0.249510039979791

几种方式

使用 sed

echo "$(sed -n "${i}p" in_parameters.txt);$(head -1 ${i}_out.txt)"
echo "$(sed -n "${i}p" in_parameters.txt);$(sed -n "1p" ${i}_out.txt)"

使用 awk

awk -v s=$i 'NR==FNR{if (FNR==s) printf $0 ";";next} {if (FNR==1) print}' in_parameters.txt ${i}_out.txt

当然,您可以使用现有代码来合并它们,如 @jaypal singh 所示。

您可以组合变量,但必须对;进行转义,否则它会表示脚本中的新行。

line2=$line;$extr_out

或者,您可以使用大括号将变量名与;分开并使用引号。

line2="${line};$extr_out"

相关内容

  • 没有找到相关文章

最新更新