Shell 将文件归档到表awk中
我正试图通过读取文件来制作表格 下面是我试图编译的代码示例:Shell 将文件归档到表awk中,shell,awk,tags,Shell,Awk,Tags,我正试图通过读取文件来制作表格 下面是我试图编译的代码示例: FHEAD|1|PRMPC|20200216020532|1037|S TMBPE|2|MOD TPDTL|3|72810|1995019|11049-|11049-|Dcto 20|0|5226468|20200216000001|20200222235959|2||1|||| TPGRP|4|5403307 TGLIST|5|5031472|1||| TLITM|6|1010
FHEAD|1|PRMPC|20200216020532|1037|S
TMBPE|2|MOD
TPDTL|3|72810|1995019|11049-|11049-|Dcto 20|0|5226468|20200216000001|20200222235959|2||1||||
TPGRP|4|5403307
TGLIST|5|5031472|1|||
TLITM|6|101055590
TPDSC|7|0|||-20||2|1|
TPGRP|8|5403308
TGLIST|9|5031473|0|||
TPDTL|13|10728|1995021|11049-|11049-|Dcto 30|0|5226469|20200216000001|20200222235959|2||1||||
TPGRP|14|5403310
TGLIST|15|5031475|1|||
TLITM|16|210000041
TLITM|17|101004522
TPDSC|113|0|||-30||2|1|
TPGRP|114|5403309
TGLIST|115|5031474|0|||
TLITM|116|101047933
TLITM|117|101004681
TLITM|118|101028161
TPDSC|119|0|||-25||2|1|
TPISR|214|101004225|2350|EA|20200216000000|COP|
TTAIL|1135
FTAIL|1136|1134
我试图开发代码,但它在一行中返回所有标记
for filename in "$input"*.dat;
do
echo "$filename">>"$files"
a=`awk -F'|' '$1=="FHEAD" && $5!=""{print $5}' "$filename"`
b=`awk -F'|' '$1=="TPDTL" && $3!=""{print $3}' "$filename"`
c=`awk -F'|' '$1=="TPDTL" && $4!=""{print $4}' "$filename"`
d=`awk -F'|' '$1=="TPDTL" && $10!=""{print $10}' "$filename"`
e=`awk -F'|' '$1=="TPDTL" && $11!=""{print $11}' "$filename"`
f=`awk -F'|' '$1=="TPDSC" && $6!=""{print $6}' "$filename"`
g=`awk -F'|' '$1=="TLITM" && $3!=""{print $3}' "$filename"`
例如:
echo -e ${d}
202002160000001 202002160000001
我想要一个像这样的东西
有人能帮我吗
提前感谢假设:
- 关键字出现的频率,如
,FHEAD
等 它们并不统一。如果需要,请使用最新版本TPDTL
- 行数应等于
的计数TLITM
- 当出现
时,应更新该表TPDSC
awk 'BEGIN {FS = "|"; OFS = ","}
$1 ~ /FHEAD/ {a = $5}
$1 ~ /TPDTL/ {b = $3; c = $4; d = $10; e = $11}
$1 ~ /TLITM/ {f[++tlitm_count] = $3}
$1 ~ /TPDSC/ {g = $6;
for (i=1; i<=tlitm_count; i++) {
print a, b, c, d, e, f[i], g
}
tlitm_count = 0;
}
' *.dat
如果希望输出分隔符为空白,请修改OFS的
值
请在问题中添加文本形式的预期输出示例,以使其更清晰。解决方案非常完美!非常感谢。但是,打印每行是否有任何字符限制?当他试图在输出中打印“g”时,会给出一个输入。@RCLFA感谢您的反馈。我想每行没有#个字符的限制。请你提供一个最小的样本输入集,附加到你的原始文章或通过下载网站,这样我就可以重现这种现象?BR.分析文件时,我注意到它们包含在字段g“\n”中。我明白了,这就是为什么我要写一条新的线路。感谢您的及时分析。
1037,72810,1995019,20200216000001,20200222235959,101055590,-20
1037,10728,1995021,20200216000001,20200222235959,210000041,-30
1037,10728,1995021,20200216000001,20200222235959,101004522,-30
1037,10728,1995021,20200216000001,20200222235959,101047933,-25
1037,10728,1995021,20200216000001,20200222235959,101004681,-25
1037,10728,1995021,20200216000001,20200222235959,101028161,-25