awk를 사용하여 스크립트 파일에서 특수 문자 인용

awk를 사용하여 스크립트 파일에서 특수 문자 인용

그래서 사용자가 입력한 숫자를 받아들이고 그 숫자에 따라 특정 명령을 실행하는 스크립트 파일을 작성하고 싶습니다. awk물론 이 명령은 필드 구분자를 사용하는 명령이다. awk다음 파일을 사용하고 있습니다 /etc/passwd.

smiths|Login|2
olivert|Login|2
northj|Login|2
denniss|Login|2
smithd|Login|2
smiths|Time Reporting|210
olivert|Payroll|155
northj|Server Maintenance|70
northj|Logfile Reporting|45
denniss|Report Printing|80
smithd|Payroll Program Updates|150
smithd|Payroll Program Updates|180
smiths|Logout|2
olivert|Logout|2
northj|Logout|2
denniss|Logout|2
smithd|Logout|2

내 문제는 파이프를 필드 구분 기호로 사용하려고 하는데 백슬래시를 사용하여 파이프를 이스케이프 처리하려고 할 때(이것이 내가 해야 한다고 생각하는 것임) 실제로 인용하지 않는다는 것입니다. 콜론과 같은 것을 사용하면 문제가 되지 않습니다.

case "$choice" in
    1)
       awk -F : '$2\n'
       ;;
    2)
       awk -F : '$1\n'
       ;;

콜론 대신 필드 구분 기호로 파이프(위 문서 참조)를 사용하고 싶습니다. 어떤 답변이라도 감사하겠습니다!

답변1

올바른 구문은 다음과 같습니다.awk '-F[|]' '{ print $2 }'

이것은|껍데기특수 문자이므로 셸이 파이프를 생성하지 못하도록 따옴표로 묶어야 합니다.

하지만 |또한정규식에서 대체 패턴을 구분하는 데 사용되는 특수 문자입니다. 이를 참조하는 가장 좋은 방법은 와 같이 단일 문자로 구성된 범위에 넣는 것입니다 [|]. -F 옵션은 정규식(RE, 패턴)으로 사용되는 awk 변수 FS(필드 구분자)를 설정합니다.

[..]그런 다음 파일 이름을 확장하는 쉘 특수 문자가 있을 수도 있으므로 전체 내용을 인용해야 합니다 .

'$2\n'유효한 awk 프로그램이지만 기대한 대로 작동하지 않습니다. 아무런 조치도 취하지 않은 상태로 모드 상태입니다. 따라서 $2가 비어 있지 않으면 모드는 True이고 전체 행이 인쇄됩니다.

작업을 원하고 이것이 수행되는 작업 { }이며 필드를 선택하고 인쇄하기만 하면 됩니다. 개행 문자가 필요하지 않습니다. print는 이 작업을 자동으로 수행합니다.

관련 정보