テキストファイルの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
右境界を表示し、^ を使用して左境界を制限します。この範囲で正規表現を探してください。見つかった場合は、元に保留を印刷します。ワイヤー。