여러 기록이 포함된 파일이 있습니다. 특정 위치(예: 위치 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자를 읽음).