awk - 파일 및 STDIN에서 입력을 받나요?

awk - 파일 및 STDIN에서 입력을 받나요?

파일과 터미널에서 입력을 받을 수 있나요? ENDawk 스크립트 부분에서 사용자에게 몇 가지 질문을 하고 싶습니다 .

이 입력은 처리할 데이터가 포함된 파일에서 읽는 대신 사용자가 입력해야 합니다.

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/stdinstdin (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실제로 이러한 시스템에서는 기호 링크)입니다.

답변2

~처럼보이는, -또한 유효함:

getline < "-"

또는

getline variable < "-"

관련 정보