그래서 사용자가 입력한 숫자를 받아들이고 그 숫자에 따라 특정 명령을 실행하는 스크립트 파일을 작성하고 싶습니다. 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는 이 작업을 자동으로 수행합니다.