cut 的串联将变量放入其中

concatination of cut putting variable inside it

我编写了以下代码:

Fileformat=
Fileresource=

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


        First_Pos_resource=$(awk -F ';' 'NR=='$j'{print }' "${Fileformat}")
        Length_resource=$(awk -F ';' 'NR=='$j'{print }' "${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

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

看起来像这样:

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

我已经对上面的代码行进行了编码,但是我对连接后生成的 white-space 有问题

显示但不需要的输出:

jd ffgd dfssd

错误消息看起来您的变量设置不正确。如果无法访问您的精确输入文件,就很难对其进行调试;但是 copy/pasting 你的数据为我产生了 range 值:

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

这显然是不正确的。如果你想让 shell 对值进行算术运算,你需要使用 (( 算术表达式 ))

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

awk -F ';' 'NR==FNR { res = res [=11=]; next }
  { printf "%s", substr(res, , ) }
  END { print "" }' resource fileformat.txt

我没有得到你指定的输出结果,但我可能在数据中有一些 copy/paste 错误,或者误解了你想要计算子字符串偏移量的精确程度。

(我忍不住纠正了"resource"的拼写。)