awk 인쇄 호스트 이름 [닫기]

awk 인쇄 호스트 이름 [닫기]

이 명령을 실행하는 현재 시스템의 호스트 이름을 어떻게 지정할 수 있습니까?

ls -l | awk '{print $9}'

전류 출력

fileabc.txt
fileABC.txt
filedata
fisample

예상 출력

hostname    fileabc.txt
            fileABC.txt
            filedata
            fisample

여러 서버에서 이 작업을 수행하고 날짜를 파일에 저장하는 경우 특정 서버의 시작 줄과 끝 줄을 알기 위해 이 작업을 수행하려고 합니다.

더 나은 해결책이 있다면 조언 부탁드립니다.

답변1

업데이트된 질문의 정확한 결과를 얻으려면:

ls -1 | awk -vhostname="$(hostname)" \
            'NR == 1 { printf("%-20s\t%s\n", hostname, $0) }
             NR > 1  { printf("%-20s\t%s\n", "", $0) }'

ls -1그러면 호스트 이름에 20자 너비의 열이 할당되고 출력의 두 번째 열이 추가됩니다. 열은 탭으로 구분되며 호스트 이름은 첫 번째 줄에만 나타납니다.


현재 시스템의 호스트 이름을 얻는 방법과 파일 이름 또는 파일 내에서 해당 호스트 이름을 사용하여 데이터가 어느 시스템에서 왔는지 알 수 있는 방법을 묻는 것 같습니다.

머신의 호스트 이름은 hostname명령에 의해 제공됩니다. 이는 일반적으로 도메인 이름(정의된 경우)을 포함하여 전체 호스트 이름을 제공하며 hostname -s첫 번째 점 앞에 이름도 제공합니다.

$ hostname
client.local

$ hostname -s
client

명령이 있고 출력을 저장할 파일 이름을 만들고 싶다면 다음을 수행할 수 있습니다.

somecommand >"$(hostname)_output.txt"

이는 실행 somecommand(예: ls명령)되고 실행 중인 시스템의 호스트 이름이 포함된 이름의 파일에 출력을 저장합니다.

파일의 머리글이나 바닥글에 호스트 이름을 삽입하려면 다음을 수행하세요.

( echo "HEADER: The following comes from $(hostname)"
  somecommand
  echo "FOOTER: The above came from $(hostname)" ) >outputfile

또는 다음을 사용하여 awk:

somecommand | awk -v hostname="$(hostname)" 'BEGIN { print "## From:", hostname }
                  { print } END { print "## From:", hostname }'

somecommand출력을 저장하려는 명령은 어디에 있습니까?

호스트 이름으로 각 줄에 태그를 지정하려면 다음을 수행하십시오.

somecommand | awk -v hostname="$(hostname)" '{ print hostname, $0 }'

또는 그 변형.

-v옵션을 사용하면 명령줄에서 변수를 설정할 수 있습니다 awk.awk

HOSTNAME환경 변수가 정의되어 있을 수도 있습니다 . 이 경우 다음 명령 대신 사용할 수 있습니다 hostname.

awk -v hostname="$HOSTNAME" ...

awk또는 를 사용하여 코드 내에서 환경 변수에 직접 액세스할 수 있습니다 ENVIRON["HOSTNAME"].

답변2

다음과 같이 "HOSTNAME" 환경 변수의 내용을 삽입할 수 있습니다.

ls -l | awk '{print ENVIRON["HOSTNAME"] ": " $9}'

이것이 작동하지 않으면 "HOST" 변수에 필요한 내용이 포함되어 있는지 확인하십시오.

ls -l | awk '{print ENVIRON["HOST"] ": " $9}'

둘 다 설정되지 않은 경우 다음을 시도해 보세요.

ls -l | awk 'BEGIN { h="/bin/hostname"; h | getline host; close (h);} {print host ": " $9}'

이는 /bin/hostname명령을 한 번 호출하고 해당 출력을 host변수에 넣은 다음 각 줄 앞에 붙습니다.

편집: 호스트 이름은 한 번만 인쇄할 수 있다고 질문을 변경했습니다. 변형은 다음과 같습니다.

ls -1 | awk 'BEGIN { h="/bin/hostname"; h | getline  host; close (hostname);} { if (NR < 2) {print host}; print "\t" $1}'

관련 정보