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"的拼写。)
我编写了以下代码:
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"的拼写。)