조건에 따라 레코드를 다른 파일로 복사

조건에 따라 레코드를 다른 파일로 복사

여러 기록이 포함된 파일이 있습니다. 특정 위치(예: 위치 19 및 20)에 코드 "06"이 있는 레코드를 다른 파일로 복사해야 합니다. 레코드 사이에는 공백이 없습니다. 쉘 스크립트를 사용하여 이를 어떻게 달성할 수 있습니까?

답변1

"위치 19 및 20"이 "06"과 동일한 줄의 문자 19 및 20을 참조하는 경우 이를 수행하는 방법에는 여러 가지가 있습니다.

사용 grep:

grep -E '^.{18}06' your_file > new_file

이 명령은 줄 시작 부분 뒤에 18개의 문자가 있고 그 뒤에 두 개의 문자가 오는 줄을 찾습니다 06.


배시 사용:

while IFS= read -r line; do
    code="${line:18:2}"
    [ "$code" == 06 ] && printf "%s\n" "$line"
done < your_file > new_file

위와 유사하지만 Perl에서는 다음과 같습니다.

perl -ne 'print if substr($_,18,2) eq "06"' your_file > new_file

Bash와 Perl 모두에서 문자열의 첫 번째 위치는 위치 0이므로 이 시나리오에서 문자 19와 20은 위치 18과 19에 있습니다(위치 18에서 2자를 읽음).

관련 정보