将变量置于其中的连接

时间:2016-06-23 09:04:32

标签: linux shell awk scripting cut

我编写了以下代码:

Fileformat=$2
Fileresource=$1

 for (( j=1; j<=3; j++ ))
       {


        First_Pos_resource=$(awk -F ';' 'NR=='$j'{print $3}' "${Fileformat}")
        Length_resource=$(awk -F ';' 'NR=='$j'{print $4}' "${Fileformat}")
        last_Pos_resource=$((Pos_resource+Length_resource))
        range=${First_Pos_resource}"-"${last_Pos_resource}
        OUtput_line=${OUtput_line}$(cut -c${range} "${Fileresource}")

       }
            echo $OUtput_line  >> OutputFile.txt

Fileformat:是outputFile.txt应该遵循的结构。 Fileformat.txt定义: 名称;位置输出;位置在资源文件中;从资源文件中删除字符串的长度

Fileformat.txt如下所示:

first;1;15;2
second;3;6;4
blabla;7;23;8

Fileresource:它包含一行字符串,我们从中生成输出文件

它看起来像这样:

sfdssdffgdfglkjdfsld lkjlkkfdssdfssdf

总结一下:文件资源+文件格式= OutputFile.txt

解释

first;1;15;2 + sfdssdffgdfglkjdfsld lkjlkkfdssdfssdf = jd
second;3;6;4 + sfdssdffgdfglkjdfsld lkjlkkfdssdfssdf = ffgd
blabla;7;23;5 + sfdssdffgdfglkjdfsld lkjlkkfdssdfssdf = dfssd

所以在连接后我应该在输出文件中有这个结果:Output.txt看起来像这样

jdffgddfssd

我已经对上面的行进行了编码,但是在连接后生成的空格有问题

输出显示但不理想:

jd ffgd dfssd

1 个答案:

答案 0 :(得分:1)

错误消息看起来您的变量未正确设置。如果无法访问您的精确输入文件,则很难对其进行调试;但复制/粘贴您的数据会为我生成range这样的值:

range=15-+2
range=6-+4
range=23-+8

这显然是不正确的。如果您希望shell对该值执行算术运算,则需要使用(( 算术表达式 ))

无论如何,你的循环看起来完全是内在的。此外,将整个脚本重构为单个Awk脚本将使其更高效,更简单。

awk -F ';' 'NR==FNR { res = res $0; next }
  { printf "%s", substr(res, $3, $4) }
  END { print "" }' resource fileformat.txt

我没有得到您开出的输出,但我可能在数据中有一些复制/粘贴错误,或者误解了您想要计算子串偏移的确切程度。

(我忍不住纠正“资源”的拼写。)