连接变量不符合我的要求

时间:2014-02-14 00:09:13

标签: bash variables awk character

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

第一个变量$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如何处理这些变量?

4 个答案:

答案 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"