我需要连接两个变量和一个字符
第一个变量$line
由 line=$(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"