テキストファイル内の2つの位置の間のパターンを検索し、行全体を印刷します。

テキストファイル内の2つの位置の間のパターンを検索し、行全体を印刷します。

テキストファイルの1行から2つの位置の間のパターンを検索し、パターンが見つかった行全体を印刷する方法は?固定幅ファイルで作業しています。各フィールドの長さを含むリストを提供する方法を理解していますawkが、検索パターンの単一フィールドにのみ興味があります。各フィールドの長さを指定しないより簡単な解決策はありますか?

これはファイルのテキスト行です。他の場所に「Cook Co. IL」がない場所18と57の間のすべてのルートをどのように見つけることができますか?

17 031 1602 1600 Cook Co. IL                              047 011 9999 9999 Bradley Co. TN                                16

答え1

アッ解決策:

awk 'substr($0,18,57-18)~/Cook Co\. IL/' file

部分文字列(文字列、開始[、長さ])
返す長さ- 文字長の部分文字列ひも、文字数から始まるスタート

答え2

行を3つのフィールド(0-17、18-57、58+)としてのみ処理しようとするため、フィールドの幅を指定することは難しくありません。

awk -v FIELDWIDTHS="17 40"  -e '$2 ~ /Cook Co\. IL/'

答え3

sed -e 'h; s/./&\n/57; /^.\{17\}.*Cook Co[.] IL.*\n/!d; g' yourfile

右境界を表示し、^ を使用して左境界を制限します。この範囲で正規表現を探してください。見つかった場合は、元に保留を印刷します。ワイヤー。

関連情報