我需要连接两个变量和一个字符
第一个变量$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如何处理这些变量?
答案 0 :(得分:3)
您的文件in_parameters.txt
具有Windows行结尾(CR-LF),因此当您使用awk
提取整行时,该行以回车符结束。因此,当您在行的末尾附加某些内容时,您将在回车符后放置它,因此它会覆盖该行开头的文本。
使用dos2unix
删除CR,你应该没问题。 (您可能还想检查其他数据文件。)
答案 1 :(得分:1)
像这样连接?
$ 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
答案 2 :(得分:0)
几种方式
使用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节目。
答案 3 :(得分:0)
您可以组合变量,但必须对;
进行转义,因为它会在脚本中表示新行。
line2=$line\;$extr_out
或者您可以使用花括号将变量名称与;
分开并使用引号。
line2="${line};$extr_out"