파일의 일대다 위치에서 특정 문자 찾기

파일의 일대다 위치에서 특정 문자 찾기

고정 형식 텍스트 파일을 반복하고 파일의 데이터 줄 내에서 하나 이상의 특정 문자 위치(첫 번째 문자 위치 포함)에서 특정 문자를 찾는 방법을 찾고 있습니다. 이러한 위치 중 문자 기준과 일치하는 위치가 있으면 해당 레코드/라인을 출력하고 싶습니다. 이 작업을 수행할 수 있는 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

최소한 with gawkmawk빈 필드 구분 기호를 설정하여 각 문자를 필드로 처리할 수 있습니다. 예를 들어 당신은 할 수 있습니다

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

그러면 일치하는 레코드(행)가 기본 인쇄 규칙을 사용하여 인쇄됩니다.

비슷한 트릭 perl(필드의 인덱스는 0임)

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

관련 정보