고유한 값을 찾고 각 값을 별도의 변수로 추출하는 쉘 스크립트

고유한 값을 찾고 각 값을 별도의 변수로 추출하는 쉘 스크립트

vname과 vport가 포함된 file1이 있습니다.

Vname vport
xyc    3:4:7
sdf    5:5:5
sft    5:5:5
sfg    3:4:7
szd    1:2:3

고유한 포트 가져오기

vport 1:2:3

이들을 분리하여 a=1, b=2, c=3과 같은 변수에 할당합니다.

답변1

이것이 귀하의 질문에 대한 답변입니까?

#!/bin/bash

# IFS is a special enviroment variable. The character in it will be used
# by 'read' (which is a bash builtin command).
#
# In this case we need space and colon as separators
#
IFS=' :'

# Looping over lines in the file, fo each line read name, a, b, and c.

# "sed 1d" command deletes first line to skip over header ("Vname vport")
#
sed 1d file1 | while read name a b c ; do

    # If it was an empty line, skip and loop to next line
    #
    [ "$name" ] || continue

    # output the variables for demonstration
    #
    echo "name: $name"
    echo "a = $a"
    echo "b = $b"
    echo "c = $c"

    # extra line to separate output of next line
    #
    echo

done

답변2

vport파일에서 한 번만 발생하는 조합을 식별하고 이를 세 개의 변수 ab로 분할하려고 한다고 가정합니다 c. 이 경우 연관 배열을 사용할 수 있습니다.

다음이 작동합니다.

#!/bin/bash

declare -A counts   # declare `counts` as associative container

# Read the file line-wise
while read vname vport
do
    if [[ "$vname" == "Vname" ]]; then continue; fi # skip header

    # if current 'vport' value not yet encountered, add it to the array
    # with count=1, otherwise increment the value
    if [[ -z "${counts[$vport]}" ]]
    then
        counts[$vport]=1
    else
        let counts[$vport]=${counts[$vport]}+1
    fi
done < file.txt


# Identify which one only occurs once: iterate over all "keys" and
# check which "value" is "1"
found=0
for vp in "${!counts[@]}"
do
    # If such a key was found, split it at the ':' and read the parts
    # into individual variables
    if [[ "${counts[$vp]}" == "1" ]]
    then
        IFS=":"
        read a b c <<< "$vp"
        found=1
        break
    fi
done


# Output the variables if a unique port specification was found
if (( found == 1 ))
then
    echo "Unique port found: a=$a, b=$b, c=$c"
else
    echo "No unique port found!"
fi

노트이는 다음과 같이 가정합니다.이러한 고유한 포트는 하나만 있습니다.(귀하의 예에서 추측하는 것이 합리적으로 보입니다).

관련 정보