固定長ファイルの特定の列から複数のパターンを検索し、行全体を出力します。

固定長ファイルの特定の列から複数のパターンを検索し、行全体を出力します。

固定長ファイルの特定の列でパターンを検索し、行全体を別のファイルに出力するには、Unixでコマンドが必要です。

サンプルファイル1

2345abcdef450022677
1234sdfght350022677
3456abcdef350022677

列5〜10 = abcdef、列15〜16 = 22の場合は、これらの行を抽出する必要があります。

出力ファイルに次のデータがあることを望みます。

2345abcdef450022677
3456abcdef350022677

grepでcutコマンドを使用してパターンを見つけることができますが、行全体を出力する方法がわかりません。

答え1

この試み

$ cat foo
2345abcdef450022677
1234sdfght350022677
3456abcdef350022677
$ grep -E '^.{4}abcdef.{4}22' foo >foo2
$ cat foo2
2345abcdef450022677
3456abcdef350022677
$

または

$ awk 'substr($0,5,6)=="abcdef" && substr($0,15,2)=="22"' foo >foo2
$ cat foo2
2345abcdef450022677
3456abcdef350022677
$

でも

$ grep '^....abcdef....22' foo >foo2
$ cat foo2
2345abcdef450022677
3456abcdef350022677
$

最後にsedを使用します(5〜10番目がabcdefで、15〜16番目が22であることを確認してください。行が削除されない場合は、user112638726にクレジットを付与してください)。

sed '/^.\{4\}abcdef.\{4\}22/p;d' foo

答え2

sedから

sed '/^.\{4\}abcdef.\{4\}22/p;d' file

5〜10番目の数字がabcdefであること、15〜16番目の数字が22であることを確認してください。それ以外の場合は、その行を削除してください。

関連情報