파일과 터미널에서 입력을 받을 수 있나요? END
awk 스크립트 부분에서 사용자에게 몇 가지 질문을 하고 싶습니다 .
이 입력은 처리할 데이터가 포함된 파일에서 읽는 대신 사용자가 입력해야 합니다.
END {
getline choice
if(choice == "Y")
print "OK"
}
그러나 선택 항목은 입력 파일에서 읽혀집니다.
답변1
/dev/tty
에서 또는 에서 읽을 수 있습니다 /dev/stdin
.
getline choice < "/dev/tty"
/dev/tty
/dev/null
상당히 일반적이고(희귀하고 POSIX /dev/console
에서 요구하는 경우에도 ) /dev/stdin
덜 일반적이지만 적어도 GNU awk는 시스템에 그러한 장치/특수 파일이 없더라도 이를 stdin으로 인식합니다.
Linux(및 Cygwin(다른 Unix 계열은 제외))에서 읽기는 /dev/stdin
stdin (fd 0) 에서 읽는 것과 동일하지 않고 오히려 fd 0 에서 열린 동일한 파일에서 읽는 것을 의미합니다. 예를 들어 파일이 일반 파일인 경우 fd 0이 현재 파일을 가리키는 위치가 아닌 파일의 시작 부분부터 읽기 시작합니다.
GNU는 awk
경로 자체를 처리하고 /dev/stdin
이를 stdin에서 읽는 것으로 처리하기 때문에 Linux나 Cygwin에서는 특별한 처리를 수행하지 않는 다른 응용 프로그램과 다르게 동작합니다. Linux/Cygwin 동작 gawk
(여기서는 해당되지 않을 수 있음) 을 원하는 경우 ///dev/stdin
또는 /dev/./stdin
중지 를 사용 gawk
하여 특수 사례로 식별 할 수 있습니다 /dev/stdin
. 또는 Linux/Cygwin 특정 동작에 의존하려는 경우 Linux를 사용하는 것이 더 좋습니다. /Cygwin 특정 /proc/self/fd/0
경로( /dev/stdin
실제로 이러한 시스템에서는 기호 링크)입니다.