特定の範囲の列でのみ検索して置き換える方法は?

特定の範囲の列でのみ検索して置き換える方法は?

9267行を含むテキストファイルがあります。 「A」の後にスペース5つが来るのを見つけて、「A」の後にスペース5つが来るものに変えたいと思います。前と後すべての行に表示されますが、67列と88列の間にのみ表示されます。この列の外側のテキストは除外す​​る必要があります。私はそれをうまく使う方法がわかりませんが、ここで役に立つことを願っていますsedawk


詳細:128ページPDFをスプレッドシートに変換しています。 PDFeditを使用してPDFをテキストファイルとして保存します。 LibreOfficeを使用して「ファイルのシート」を挿入する予定です。 PDFの列は見事に整列していますが、スプレッドシートの種類列はテキストファイル全体でまったく同じテキストファイルタイプの列にないため、これは困難であることがわかりました。 50行ごとに異なるPDFページに対応し、スプレッドシートタイプの列は一部のテキストファイルタイプの列の左右に移動できます。つまり、「シェルフ」のスプレッドシートタイプ列は、ファイルの一部ではテキストファイルタイプ列70から始まりますが、他の部分ではテキストファイルタイプ列76で始まります。これにより、LibreOfficeに「固定幅」を挿入しようとすると、スプレッドシートタイプの列が重なります。 LibreOfficeに列を定義する場所を知らせるために、検索と置換でスペースを追加して列をより広くしたいと思います。ファイル全体を見つけて置き換えると、最終的に不要な場所にスペースを入れます。


以下は非常に正確な例です。

Item Code             Active Description                                Store Room      Row      Shelf     Bin  On Hand   
 38NUTZSL                Y      3/8"-16 HEX ZINC NUT                     B            03           C         2         0  
 WELD-AL                 Y      WELD, ALUM. ROD, STICK OR SPOOL          A            01             B       2         68.25  
 08300                   Y      WASHER, 7/8 CASE HARDENED 29/32 ID,1 3/4 OD  A            01        C            5         0

答え1

列区切り文字を変更してcolumnコマンドを使用するより良い方法:

sed 's/   */;/g' file | column -ts';'

生産する:

Item Code  Active  Description                                  Store Room  Row  Shelf  Bin  On Hand
 38NUTZSL  Y       3/8"-16 HEX ZINC NUT                         B           03   C      2    0
 WELD-AL   Y       WELD, ALUM. ROD, STICK OR SPOOL              A           01   B      2    68.25
 08300     Y       WASHER, 7/8 CASE HARDENED 29/32 ID,1 3/4 OD  A           01   C      5    0

関連情報