특정 열 번호로 시작하는 텍스트 열을 포함하는 행 필터링

특정 열 번호로 시작하는 텍스트 열을 포함하는 행 필터링

열 형식 데이터가 포함된 텍스트 파일이 있고 특정 조건을 충족하는 행을 필터링하려고 합니다. 두 번째 열의 데이터는 열 162가 아닌 열 161에서 시작합니다. 그러므로:

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

처리 후에는 다음과 같은 내용이 남습니다.

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

명령줄 도구를 사용하여 이를 달성하려면 어떻게 해야 합니까?

고쳐 쓰다

패턴이 일치하는 행을 삭제하고 파일의 마지막 열도 삭제해야 합니다. 따라서 최종 출력은 다음과 같아야 합니다.

OS10101 12011   DLS     NCI Dealer Systems                                          DLS3270 DLS20P10RDR Maintenance          
OS10101 12011   DLS     NCI Dealer Systems                                          DLS3270 DLS07P10NCFI Lease/Loan Payout Query

답변1

질문이 완전히 명확하지 않기 때문에 약간의 추측이지만

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

161열(공백 아님)에 "데이터"가 있으면 해당 행을 삭제합니다. 다른 모든 줄은 인쇄됩니다. 결과는 다음과 같습니다.

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

(더 나은 방법이 있다고 생각하지 않을 수 없지만 이것이 OP가 제공하는 전부입니다.)

답변2

테스트를 거쳐 잘 작동하는 다음 명령을 사용하십시오.

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

관련 정보