Linux 将变量放入其中的切割浓缩
我已将以下代码编码:Linux 将变量放入其中的切割浓缩,linux,shell,awk,scripting,cut,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_Po
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
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
错误消息显示变量设置不正确。如果无法访问精确的输入文件,很难调试它;但是复制/粘贴数据会为我生成如下值:
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
我没有得到您指定的确切输出,但我可能在数据中有一些复制/粘贴错误,或者误解了您希望如何准确计算子字符串偏移量
(我忍不住纠正了“resource”的拼写。谢谢@tripleee我已经纠正了代码和帖子,但是我得到了一个空格我修复了它,OUtput_line=${OUtput_line}$(cut-c${range}{Fileresource}'.'awk'NR==1{print$1}')这是一个可怕的修复。只需将代码重构为单个Awk脚本。