特定の列番号で始まるテキスト列を含む行のフィルタリング

特定の列番号で始まるテキスト列を含む行のフィルタリング

列形式のデータを含むテキストファイルがあり、特定の条件を満たす行をフィルタリングしようとしています。 2番目の列のデータは、列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

関連情報