Filtre as linhas que possuem uma coluna de texto começando em um determinado número de coluna [closed]

0

Eu tenho um arquivo de texto contendo dados colunares e eu gostaria de filtrar as linhas que atendem a um critério específico: os dados da penúltima coluna começam na coluna 161 em vez de 162. Então, dado isso:

EP10101 12011   SC0     NCI Application Security                                    DLS3270 SC040P20Maintain User Access                                        MF20170901150328000NGS2    20170901150328000            
EP10101 12011   SC0     NCI Application Security                                    DLS3270 SC040P20Maintain User Access                                        PF20170901150328000NGS2    20170901150328000            
OS10101 12011   DLS     NCI Dealer Systems                                          DLS3270 DLS20P10RDR Maintenance                                              B20171016171130000NGS2    20171016171130000            
OS10101 12011   DLS     NCI Dealer Systems                                          DLS3270 DLS07P10NCFI Lease/Loan Payout Query                                 B20171016134250000NGS2    20171016134250000            
OS10101 12011   DLS     NCI Dealer Systems                                          DLS3270 DLS20P10RDR Maintenance                                              B20171016143354000NGS2    20171016143354000

Fico com isso depois do processamento:

OS10101 12011   DLS     NCI Dealer Systems                                          DLS3270 DLS20P10RDR Maintenance                                              B20171016171130000NGS2    20171016171130000            
OS10101 12011   DLS     NCI Dealer Systems                                          DLS3270 DLS07P10NCFI Lease/Loan Payout Query                                 B20171016134250000NGS2    20171016134250000            
OS10101 12011   DLS     NCI Dealer Systems                                          DLS3270 DLS20P10RDR Maintenance                                              B20171016143354000NGS2    20171016143354000

Como posso conseguir isso com ferramentas de linha de comando?

UPDATE

Desejo excluir as linhas com o padrão correspondente e também preciso excluir as últimas colunas no arquivo. Então minha saída final deve ser como abaixo.

OS10101 12011   DLS     NCI Dealer Systems                                          DLS3270 DLS20P10RDR Maintenance          
OS10101 12011   DLS     NCI Dealer Systems                                          DLS3270 DLS07P10NCFI Lease/Loan Payout Query
    
por Ravi Rock 06.11.2017 / 17:09

2 respostas

1

É pouco provável que a pergunta não esteja totalmente clara, mas

sed '/^.\{160\}\S\+/d' file

Se isso encontrar "dados" (não espaço em branco) na coluna 161, a linha será excluída. Todas as outras linhas são impressas. Isso resulta na saída:

OS10101 12011   DLS     NCI Dealer Systems                                          DLS3270 DLS20P10RDR Maintenance                                              B20171016171130000NGS2    20171016171130000
OS10101 12011   DLS     NCI Dealer Systems                                          DLS3270 DLS07P10NCFI Lease/Loan Payout Query                                 B20171016134250000NGS2    20171016134250000
OS10101 12011   DLS     NCI Dealer Systems                                          DLS3270 DLS20P10RDR Maintenance                                              B20171016143354000NGS2    20171016143354000

(Não posso deixar de pensar que existe uma abordagem melhor, mas isso é tudo que o OP oferece.)

    
por 07.11.2017 / 03:48
-1

Use o comando abaixo conforme testado funcionou bem

for i in $(awk '{if ((length($1) > "160") && (length($1) < "184"))print NR}' filename); do sed "$i"d p.txt; done
    
por 07.11.2017 / 08:42