固定長ファイルの特定の列でパターンを検索し、行全体を別のファイルに出力するには、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であることを確認してください。それ以外の場合は、その行を削除してください。