需要有关 unix 脚本的帮助以从特定位置读取数据并使用查询中提取的数据
need help on unix Script to read a data from specific position and use the extracted in query
输入文件:
ADSDWETTYT017775227ACG
ADSDWETTYT029635225HCG
ADSDWETTYC018525223JCG
ADSDWETTYC987415221ACG
ADSDWETTCC891235219ACG
ADSDWETTTT074565217ACG
ADSDWETTYT567895213ACG
ADSDWETTYH037535215ACG
ADSDWETTYC051595211ACG
ADSDWETTYT052465209ACG
ADSDWETTYT067595207ACG
ADSDWETTYT077515205ACG
需要用 T 检查文件 contain/start 上的第 10 个位置,如果它以“T”开头,那么我需要从 16.
的 14 个字符中获取值
从上面的文件我期待下面的输出,
'5227','5225','5217','5213','5209','5207','5205'
我应该将此结果分配给一些常量,例如(下面的结果),并且应该在查询 where 子句中使用,如下所示,
result=$(awk '
BEGIN{
conf="" };
{ if(substr([=12=],10,1)=="T"){
conf=substr([=12=],16,4);
{NT==1?s="'\''"conf:s=s"'\'','\''"conf}
}
}
END {print s"'\''"}
' $INPUT_FILE_PATH
db2 "EXPORT TO ${OUTPUT_FILE} OF DEL select STATUS FROM TRAN where TN_NR in (${result})"
我需要一些帮助来增强 awk 命令并在查询 where 子句中传递常量。请帮忙。
我在这里使用 perl
而不是 awk
以获得更好的数组(特别是将一个数组连接成一个字符串)。类似于:
perl -nE "push @n, substr($_, 15, 4) if /^.{9}T/;
END { say join(',', map { \"'$_'\" } @n) }" "$INPUT_FILE_PATH"
用你展示的样品,尝试;请尝试以下 awk
代码。
awk -v s1="'" 'BEGIN{OFS=", "} substr([=10=],10,1)=="T"{val=(val?val OFS:"") (s1 substr([=10=],16,4) s1)} END{print val}' Input_file
添加上述代码的非一行形式:
awk -v s1="'" '
BEGIN{ OFS=", " }
substr([=11=],10,1)=="T"{
val=(val?val OFS:"") (s1 substr([=11=],16,4) s1)
}
END{
print val
}
' Input_file
要将此代码的输出保存到 shell 变量中,请尝试以下操作:
value=$(awk -v s1="'" 'BEGIN{OFS=", "} substr([=14=],10,1)=="T"{val=(val?val OFS:"") (s1 substr([=14=],16,4) s1)} END{print val}' Input_file)
说明:为以上代码添加详细说明。
awk -v s1="'" ' ##Starting awk program from here setting s1 to ' here.
BEGIN{ OFS=", " } ##Setting OFS as comma space here.
substr([=12=],10,1)=="T"{ ##Checking condition if 10th character is T then do following.
val=(val?val OFS:"") (s1 substr([=12=],16,4) s1) ##Creating val which has values from current line as per OP requirement.
}
END{ ##Starting END block of this program from here.
print val ##Printing val here.
}
' Input_file ##Mentioning Input_file name here.
我会为此使用 sed:
sed -En '/^.{9}T/ s/^.{15}(....).*//p' file
然后为了获得准确的输出,将其通过管道传输到
... | sed "s/.*/'&'/" | paste -sd,
输入文件:
ADSDWETTYT017775227ACG
ADSDWETTYT029635225HCG
ADSDWETTYC018525223JCG
ADSDWETTYC987415221ACG
ADSDWETTCC891235219ACG
ADSDWETTTT074565217ACG
ADSDWETTYT567895213ACG
ADSDWETTYH037535215ACG
ADSDWETTYC051595211ACG
ADSDWETTYT052465209ACG
ADSDWETTYT067595207ACG
ADSDWETTYT077515205ACG
需要用 T 检查文件 contain/start 上的第 10 个位置,如果它以“T”开头,那么我需要从 16.
的 14 个字符中获取值从上面的文件我期待下面的输出,
'5227','5225','5217','5213','5209','5207','5205'
我应该将此结果分配给一些常量,例如(下面的结果),并且应该在查询 where 子句中使用,如下所示,
result=$(awk '
BEGIN{
conf="" };
{ if(substr([=12=],10,1)=="T"){
conf=substr([=12=],16,4);
{NT==1?s="'\''"conf:s=s"'\'','\''"conf}
}
}
END {print s"'\''"}
' $INPUT_FILE_PATH
db2 "EXPORT TO ${OUTPUT_FILE} OF DEL select STATUS FROM TRAN where TN_NR in (${result})"
我需要一些帮助来增强 awk 命令并在查询 where 子句中传递常量。请帮忙。
我在这里使用 perl
而不是 awk
以获得更好的数组(特别是将一个数组连接成一个字符串)。类似于:
perl -nE "push @n, substr($_, 15, 4) if /^.{9}T/;
END { say join(',', map { \"'$_'\" } @n) }" "$INPUT_FILE_PATH"
用你展示的样品,尝试;请尝试以下 awk
代码。
awk -v s1="'" 'BEGIN{OFS=", "} substr([=10=],10,1)=="T"{val=(val?val OFS:"") (s1 substr([=10=],16,4) s1)} END{print val}' Input_file
添加上述代码的非一行形式:
awk -v s1="'" '
BEGIN{ OFS=", " }
substr([=11=],10,1)=="T"{
val=(val?val OFS:"") (s1 substr([=11=],16,4) s1)
}
END{
print val
}
' Input_file
要将此代码的输出保存到 shell 变量中,请尝试以下操作:
value=$(awk -v s1="'" 'BEGIN{OFS=", "} substr([=14=],10,1)=="T"{val=(val?val OFS:"") (s1 substr([=14=],16,4) s1)} END{print val}' Input_file)
说明:为以上代码添加详细说明。
awk -v s1="'" ' ##Starting awk program from here setting s1 to ' here.
BEGIN{ OFS=", " } ##Setting OFS as comma space here.
substr([=12=],10,1)=="T"{ ##Checking condition if 10th character is T then do following.
val=(val?val OFS:"") (s1 substr([=12=],16,4) s1) ##Creating val which has values from current line as per OP requirement.
}
END{ ##Starting END block of this program from here.
print val ##Printing val here.
}
' Input_file ##Mentioning Input_file name here.
我会为此使用 sed:
sed -En '/^.{9}T/ s/^.{15}(....).*//p' file
然后为了获得准确的输出,将其通过管道传输到
... | sed "s/.*/'&'/" | paste -sd,