需要有关 unix 脚本的帮助以从特定位置读取数据并使用在查询中提取的数据
Posted
技术标签:
【中文标题】需要有关 unix 脚本的帮助以从特定位置读取数据并使用在查询中提取的数据【英文标题】:need help on unix Script to read a data from specific position and use the extracted in query 【发布时间】:2021-09-14 19:56:33 【问题描述】:输入文件:
ADSDWETTYT017775227ACG
ADSDWETTYT029635225HCG
ADSDWETTYC018525223JCG
ADSDWETTYC987415221ACG
ADSDWETTCC891235219ACG
ADSDWETTTT074565217ACG
ADSDWETTYT567895213ACG
ADSDWETTYH037535215ACG
ADSDWETTYC051595211ACG
ADSDWETTYT052465209ACG
ADSDWETTYT067595207ACG
ADSDWETTYT077515205ACG
需要检查文件中的第 10 个位置是否包含/以 T 开头,如果它以“T”开头,那么我需要从 16 中获取 14 字符中的值。
从上面的文件我期待下面的输出,
'5227','5225','5217','5213','5209','5207','5205'
这个结果我应该分配给一些常量,比如(下面的结果),并且应该在下面的查询 where 子句中使用,
result=$(awk '
BEGIN
conf="" ;
if(substr($0,10,1)=="T")
conf=substr($0,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 子句中传递常量。请帮忙。
【问题讨论】:
【参考方案1】:用你展示的样本,尝试;请尝试关注awk
代码。
awk -v s1="'" 'BEGINOFS=", " substr($0,10,1)=="T"val=(val?val OFS:"") (s1 substr($0,16,4) s1) ENDprint val' Input_file
添加上述代码的非单行形式:
awk -v s1="'" '
BEGIN OFS=", "
substr($0,10,1)=="T"
val=(val?val OFS:"") (s1 substr($0,16,4) s1)
END
print val
' Input_file
要将此代码的输出保存到 shell 变量中,请尝试以下操作:
value=$(awk -v s1="'" 'BEGINOFS=", " substr($0,10,1)=="T"val=(val?val OFS:"") (s1 substr($0,16,4) s1) ENDprint val' Input_file)
说明:为上述代码添加详细说明。
awk -v s1="'" ' ##Starting awk program from here setting s1 to ' here.
BEGIN OFS=", " ##Setting OFS as comma space here.
substr($0,10,1)=="T" ##Checking condition if 10th character is T then do following.
val=(val?val OFS:"") (s1 substr($0,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.
【讨论】:
【参考方案2】:我会为此使用 sed:
sed -En '/^.9T/ s/^.15(....).*/\1/p' file
然后为了获得准确的输出,将其输入
... | sed "s/.*/'&'/" | paste -sd,
【讨论】:
您可以在第一个sed
中添加\1
周围的'
s,如果您只是将那个分隔引号从'
更改为"
,那么您只需有sed | paste
而不是sed | sed | paste
。【参考方案3】:
我会在这里使用perl
而不是awk
以获得更好的数组(特别是,将一个连接到字符串中)。比如:
perl -nE "push @n, substr(\$_, 15, 4) if /^.9T/;
END say join(',', map \"'\$_'\" @n) " "$INPUT_FILE_PATH"
【讨论】:
@jcrshankar 我不知道你在问什么以上是关于需要有关 unix 脚本的帮助以从特定位置读取数据并使用在查询中提取的数据的主要内容,如果未能解决你的问题,请参考以下文章
Excel:如何创建快捷方式/浮动按钮以从工作表中的任何位置填充特定单元格?
如何安排 sql 脚本并将数据导出到 IBM Netezza 中的特定位置
从 .txt 文件读取数据并将其插入 Oracle SQL DB [PL/SQL,Unix 脚本]