ファイルの1対多位置で特定の文字を検索する

ファイルの1対多位置で特定の文字を検索する

固定形式のテキストファイルを繰り返し、ファイル内のデータ行内の1つ以上の特定の文字位置(最初の文字位置を含む)で特定の文字を見つける方法を探しています。これらの位置のうち、文字基準に一致する位置がある場合は、そのレコード/行を出力したいと思います。このタスクを実行できるgrepまたはawkコマンドを持つ人はいますか?たとえば、ファイルXの5、10、または25の場所でアスタリスク(*)を見つけるには、awkまたはgrepでどうすればよいですか?ファイルの例

     cat test.txt
    *   *    *
    *   X    *
    *   *    Y
    *   X    Y

答え1

grep '^\(.\{4\}\|.\{24\}\)\*' X

ファイル内のすべての行を探します。

答え2

おそらく次のawk行はあなたがよりよく理解するのに役立ちます

printf '%s\n' "foo bar *" foo "more foo * more * foo and baz" "another foo bar foo" | awk '{for (i=1;i<=NF;i++) if ($i=="*") print $i " appears in field: " i}'

フィールドを繰り返してパターンに合わせて印刷するのと同じくらい簡単です。

答え3

少なくともwithgawkmawk空のフィールド区切り文字を設定して、各文字をフィールドとして扱うことができます。たとえば、あなたはできます

gawk -F '' '$5 == "*" || $10 == "*"' test.txt

これにより、一致するレコード(行)がデフォルトの印刷規則を使用して印刷されます。

同様のトリックperl(フィールドのインデックスは0です)

perl -F'' -ane 'print if $F[4] eq "*" || $F[9] eq "*"' test.txt

関連情報