기본적으로 핑 통계를 파일에 쓰고 싶습니다. 지금까지는 이렇게 했지만 ping adress | awk '{ print strftime("[%d.%m.%Y %H:%M:%S]"), $0}' > textfile
이전 프로세스를 중단하지 않고 출력을 볼 수 있으면 더 편리할 것입니다. 나는 또한 이 명령이 내 텍스트 파일에 stderr을 쓰지 않는다는 것을 알고 있습니다. 이 질문을 쓰면서 이 부분이 생각났어요.
명령이나 스크립트는 기본적으로 다음과 같이 동작해야 합니다.
$ command > textfile [15.08.2017 00:17:07] PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. [15.08.2017 00:17:07] 64 bytes from 8.8.8.8: icmp_seq=1 ttl=44 time=11.5 ms [15.08.2017 00:17:08] 64 bytes from 8.8.8.8: icmp_seq=2 ttl=44 time=11.5 ms ^C $ cat textfile [15.08.2017 00:17:07] PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. [15.08.2017 00:17:07] 64 bytes from 8.8.8.8: icmp_seq=1 ttl=44 time=11.5 ms [15.08.2017 00:17:08] 64 bytes from 8.8.8.8: icmp_seq=2 ttl=44 time=11.5 ms
답변1
명령을 다음으로 변경합니다.
ping address 2>&1 | awk '{ print strftime("[%d.%m.%Y %H:%M:%S]"), $0}' | tee textfile
2>&1
stderr를 stdout으로 리디렉션하여 화면과 지정된 파일 모두에 출력할 수 있도록 합니다 awk
.tee
awk
출력을 버퍼링하면 짜증이 날 수 있습니다(청크로 표시됨). 그런 다음 다음을 사용하십시오.
awk '{ print strftime("[%d.%m.%Y %H:%M:%S]"), $0; fflush()}'
또는:
stdbuf -oL awk '{ print strftime("[%d.%m.%Y %H:%M:%S]"), $0}'