1개의 파일에 데이터가 있습니다.
예:
a1b1:online
xxxx:offline
wxyz:enable
a2b2:online
txtx:disable
단일 데이터의 경우 문제가 되지 않지만 온라인의 이중 정보는 어떻습니까?
다음과 같은 정보를 어떻게 표시할 수 있나요?
data a1b1 a2b2 are online --- how to get this
data xxxx are offline -- no issue
data wxyz are enable -- no issue
답변1
$ awk -F: 'a[$2] {a[$2] = a[$2]" "$1; next};
{a[$2]=$1};
END {for (s in a) { print "data " a[s] " are " s }}' input.txt
data xxxx are offline
data txtx are disable
data a1b1 a2b2 are online
data wxyz are enable
이는 연관 배열 a
(상태 $2로 입력됨)을 사용하여 해당 상태의 호스트($1)를 저장합니다. 해당 상태에 대한 배열 요소가 이미 존재하는 경우 공백과 호스트 이름이 추가됩니다. 그렇지 않으면 호스트 이름으로 요소를 생성하면 됩니다.
(나는 그들이 호스트 이름이라고 가정하고 있습니다 - 그것은 중요하지 않습니다. 코드는 정의가 아닌 데이터에서 작동합니다)
전체 입력 파일을 읽은 후 원하는 형식으로 배열을 인쇄합니다.
의 연관 배열은 awk
특정 순서로 저장되지 않으므로 출력은 순서가 지정되지 않습니다. 정렬해야 하는 경우 awk 스크립트에서 수행할 수 있지만 출력을 sort
.
상태에만 관심이 있는 경우 online
출력을 로 파이프하거나 grep
awk 스크립트에서 실행할 수 있습니다. 예를 들어
$ awk -F: '!/online/ {next};
a[$2] {a[$2] = a[$2]" "$1; next};
{a[$2]=$1};
END {for (s in a) { print "data " a[s] " are " s }}' input.txt
data a1b1 a2b2 are online
답변2
주문하다
for i in `awk -F ":" '{print $NF}' filename | sed '/^$/d'| awk '{if(!seen[$NF]++)print }'`; do awk -v i="$i" -F ":" '$NF == i{print $1}' filename |sed "N;s/\n/ /g"| awk -v i="$i" '{print "data" " " $0" " "are "i}'; done
산출
data a1b1 a2b2 are online
data xxxx are offline
data wxyz are enable
data txtx are disable