고정 형식 텍스트 파일을 반복하고 파일의 데이터 줄 내에서 하나 이상의 특정 문자 위치(첫 번째 문자 위치 포함)에서 특정 문자를 찾는 방법을 찾고 있습니다. 이러한 위치 중 문자 기준과 일치하는 위치가 있으면 해당 레코드/라인을 출력하고 싶습니다. 이 작업을 수행할 수 있는 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 gawk
및 mawk
빈 필드 구분 기호를 설정하여 각 문자를 필드로 처리할 수 있습니다. 예를 들어 당신은 할 수 있습니다
gawk -F '' '$5 == "*" || $10 == "*"' test.txt
그러면 일치하는 레코드(행)가 기본 인쇄 규칙을 사용하여 인쇄됩니다.
비슷한 트릭 perl
(필드의 인덱스는 0임)
perl -F'' -ane 'print if $F[4] eq "*" || $F[9] eq "*"' test.txt