이 명령을 실행하는 현재 시스템의 호스트 이름을 어떻게 지정할 수 있습니까?
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}'