加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell – 在unix中的两个固定格式文件中查找字段值 – 不起作用

发布时间:2020-12-15 22:32:31 所属栏目:安全 来源:网络整理
导读:我有2个固定长度的文件输入#1输入#2.我想根据两个文件中位置37-50的值来匹配行(pos 37-50在两个文件中都有相同的值). 如果找到任何匹配记录,则根据公司代码输入文件#1中的发票编号(位置99到行尾). 剪切字符串(来自输入#1)需要附加在记录/行的末尾. 下面是我
我有2个固定长度的文件输入#1&输入#2.我想根据两个文件中位置37-50的值来匹配行(pos 37-50在两个文件中都有相同的值).

如果找到任何匹配记录,则根据公司代码&输入文件#1中的发票编号(位置99到行尾).

剪切字符串(来自输入#1)需要附加在记录/行的末尾.

下面是我尝试过的代码(不工作)和输入文件&期望的输出.请提供您的建议.

码:

awk '
NR==FNR && NF>1 {
    v=substr($0,37,14);
#print substr($0,14)
    next
}
NR==FNR && ( /Company Code/ OR /Invoice Number/ ) {
    sub(/Company Code/,"",$0);
    sub(/Invoice Number/,$0);
    a[v]=$0;
print $0
    next
}
(substr($0,14) in a) {
    print $0 a[substr($0,99)]
}' Input1.txt input2.txt input3.txt

结束代码

输入#1以一些空格开头的Start

612  2222222222201402120000       2     1  111  211 Due Date                             20140101                           
         612  2222222222201402120000       2     1  111  311 Company Code                         227                                
         612  2222222222201402120000       2     1  111  411 Item Code                            12                                 
         612  2222222222201402120000       2     1  111  511 Invoice Number                       2014010                            
         612  2222222222201402120000       2     2  111  611 Company Code                         214                                
         612  2222222222201402120000       2     2  111  711 Item Code                            20                                 
         612  2222222222201402120000       2     2  111  811 Invoice Number                       3014010                            
         612  2222222222201402120000       2     3  111  911 Due Date                             20140101                           
         612  2222222222201402120000       2     3  111  111 Invoice Number                       40140101                           
         612  2222222222201402120000       2     3  111  121 user code                            15563263636                        
         612  2222222222201402120000       2     3  111  131 Amount Due                           100000                             
         612  222222222220140212000078978982123444  111  141 Due Date                             20140101                             
         612  222222222220140212000078978982123444  111  151 Invoice Number                       50140101                             
         612  222222222220140212000078978982123444  111  161 Amount Due                          008000

输入#1结束

输入#2开头
输入2

510       77432201111010000       2     1        1ChK          100111000001    121000248           123456789            20111101.510.77432.20001C                         
         510       77432201111010000       2     1        2INv                                                                   20111101.510.77432.20001D                         
         510       77432201111010000       2     1        3INv                                                                   20111101.510.77432.20002D                         
         510       77432201111010000       2     1        4INv                                                                   20111101.510.77432.20003D                         
         510       77432201111010000       2     1        5INv                                                                   20111101.510.77432.20004D                         
         510       77432201111010000       2     2        1ChK          200111000002    121000248           123456789            20111101.510.77432.20002C                         
         510       77432201111010000       2     2        2INv                                                                   20111101.510.77432.20005D                         
         510       77432201111010000       2     2        3INv                                                                   20111101.510.77432.20006D                         
         510       77432201111010000       2     2        4INv                                                                   20111101.510.77432.20007D                         
         510       77432201111010000       2     2        5INv                                                                   20111101.510.77432.20008D                         
         510       77432201111010000       2     3        1ChK          300111000003    121000248           123456789            20111101.510.77432.20003C                         
         510       77432201111010000       2     3        2INv                                                                   20111101.510.77432.20009D                         
         510       77432201111010000       2     3        3INv                                                                   20111101.510.77432.20010D                         
         510       77432201111010000       2     3        4INv                                                                   20111101.510.77432.20011D                         
         510       77432201111010000       2     6        1ChK          600111000006    121000248           123456789            20111101.510.77432.20006C                         
         510       77432201111010000       2     6        2INv                                                                   20111101.510.77432.20021D                         
         510       77432201111010000       2     6        3INv                                                                   20111101.510.77432.20022D                         
         510       77432201111010000       2     6        4INv                                                                   20111101.510.77432.20023D                         
         510       77432201111010000       2     6        5INv                                                                   20111101.510.77432.20024D

输入#2结束

渴望外出
期望的输出

510       77432201111010000       2     1        1ChK          100111000001    121000248           123456789            20111101.510.77432.20001C   2272014010 (company & Inv # from input 1)                     
         510       77432201111010000       2     1        2INv                                                                   20111101.510.77432.20001D   2272014010                                            
         510       77432201111010000       2     1        3INv                                                                   20111101.510.77432.20002D   2272014010                                            
         510       77432201111010000       2     1        4INv                                                                   20111101.510.77432.20003D   (company & Inv # from input 1)                      
         510       77432201111010000       2     1        5INv                                                                   20111101.510.77432.20004D   (company & Inv # from input 1)                      
         510       77432201111010000       2     2        1ChK          200111000002    121000248           123456789            20111101.510.77432.20002C   (company & Inv # from input 1)                      
         510       77432201111010000       2     2        2INv                                                                   20111101.510.77432.20005D   (company & Inv # from input 1)                      
         510       77432201111010000       2     2        3INv                                                                   20111101.510.77432.20006D   (company & Inv # from input 1)                      
         510       77432201111010000       2     2        4INv                                                                   20111101.510.77432.20007D   (company & Inv # from input 1)                      
         510       77432201111010000       2     2        5INv                                                                   20111101.510.77432.20008D   (company & Inv # from input 1)                      
         510       77432201111010000       2     3        1ChK          300111000003    121000248           123456789            20111101.510.77432.20003C   (company & Inv # from input 1)                      
         510       77432201111010000       2     6        1ChK          600111000006    121000248           123456789            20111101.510.77432.20006C   <there is no matching record in input 1,this will be blank>                      
         510       77432201111010000       2     6        2INv                                                                   20111101.510.77432.20021D   <there is no matching record in input 1,this will be blank>                      
         510       77432201111010000       2     6        3INv                                                                   20111101.510.77432.20022D   <there is no matching record in input 1,this will be blank>                      
         510       77432201111010000       2     6        4INv                                                                   20111101.510.77432.20023D   <there is no matching record in input 1,this will be blank>                      
         510       77432201111010000       2     6        5INv                                                                   20111101.510.77432.20024D   <there is no matching record in input 1,this will be blank>

解决方法

尝试这样的事情(未经测试):

awk '
NR==FNR && /Company Code/ {
    cc[$3,$4] = $NF;
    next;
}
NR==FNR && /Invoice Number/ {
    inv[$3,$4] = $NF;
    next;
}
NR==FNR {next}
{print $0 FS cc[$3,$4] inv[$3,$4]}' input1 input2

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读