code: func (c *cmd) standardOutput(members []*consulapi.AgentMember) []string {
  	result := make([]string, 0, len(members))
  	header := "Node|Address|Status|Type|Build|Protocol|DC|Segment"
  	result = append(result, header)
  	for _, member := range members {
  		addr := net.TCPAddr{IP: net.ParseIP(member.Addr), Port: int(member.Port)}
  		protocol := member.Tags["vsn"]
  		build := member.Tags["build"]
  		if build == "" {
  			build = "< 0.3"
  		} else if idx := strings.Index(build, ":"); idx != -1 {
  			build = build[:idx]
  		}
  		dc := member.Tags["dc"]
  		segment := member.Tags["segment"]
  
  		statusString := serf.MemberStatus(member.Status).String()
  		switch member.Tags["role"] {
  		case "node":
  			line := fmt.Sprintf("%s|%s|%s|client|%s|%s|%s|%s",
  				member.Name, addr.String(), statusString, build, protocol, dc, segment)
  			result = append(result, line)
  		case "consul":
  			line := fmt.Sprintf("%s|%s|%s|server|%s|%s|%s|%s",
  				member.Name, addr.String(), statusString, build, protocol, dc, segment)
  			result = append(result, line)
  		default:
  			line := fmt.Sprintf("%s|%s|%s|unknown||||",
  				member.Name, addr.String(), statusString)
  			result = append(result, line)
  		}
  	}
  	return result
  }
docs: // standardOutput is used to dump the most useful information about nodes
  // in a more human-friendly format