각 네트워크 카드에 대한 세부 정보가 포함된 배열이 있습니다. 각 배열 인덱스는 공백으로 구분된 세 개의 값으로 구성됩니다.
나는 출력으로 멋진 테이블을 원합니다. 인덱스의 각 값에 형식 패턴을 할당하는 방법이 있습니까?
지금까지 이것이 내가 사용하고 있는 것입니다:
NIC_details[0]='wlp2s0 192.168.1.221 xx:xx:xx:xx:xx:xx'
NIC_details[1]='wwan0 none xx:xx:xx:xx:xx:xx'
NIC_details[2]='virbr0 192.168.122.1 00:00:00:00:00:00'
printf "%-20s\n" "${NIC_details[@]}"
$1, $2, $3 위치별로 배열 인덱스의 값에 액세스하고 해당 값이 공백으로 구분되어 있음을 알고 각 $X 위치에 대해 서식 지정 패턴을 적용하는 방법이 있나요?
나도 시도했다
echo "$i" | column -t
하지만 원하는 결과를 얻지는 못했습니다.
답변1
이미 수행 중인 작업을 약간 수정하면 다음과 같습니다.
set -f # to prevent filename expansion
for i in ${!NIC_index[@]}
do
printf "%-20s" ${NIC_details[i]}
printf "\n"
done
for
모든 배열 인덱스를 반복하기 위해 루프를 추가했습니다 ${!NIC...
. 이것이 구문 입니다. 숫자 배열이므로 인덱스를 직접 반복할 수도 있습니다.
참고로 저는 일부러 나갔습니다.${NIC_details[i]}
인용되지 않음이렇게 하면 쉘이 값을 구분하는 데 사용되는 공백으로 값을 분할하게 됩니다. printf
따라서 3개의 값이 표시되고 각 값에 대해 %-20s 형식을 반복합니다. 그런 다음 각 네트워크 카드 뒤에 개행 문자를 추가하여 멋진 테이블을 만들었습니다.
set -f
변수를 인용 해제하면 맨 위의 변수가 중요합니다. 그렇지 않으면 쉘이 개입하여 시도합니다.전반적인 상황따옴표가 없는 변수에 표시되는 와일드카드입니다.
예제 출력:
wlp2s0 192.168.1.221 xx:xx:xx:xx:xx:xx
wwan0 none xx:xx:xx:xx:xx:xx
virbr0 192.168.122.1 00:00:00:00:00:00
답변2
예, 다음 과 같은 방법이 있습니다 awk
.
echo ${NIC[0]} | awk '{ printf "%-10s %s\n", $1, $2 }'
또 다른 방법은 다양한 변수의 값을 가져온 다음 printf
bash에서 작업을 수행하는 것입니다. 좋다:
var1=$(echo ${NIC[0]} | cut -d ' ' -f1)
var2=$(echo ${NIC[0]} | cut -d ' ' -f2)
var3=$(echo ${NIC[0]} | cut -d ' ' -f3)
printf
$var1,2,3과 함께 사용됩니다.