텍스트 파일의 키와 값에서 문자열을 추출하고 새 변수에 할당

텍스트 파일의 키와 값에서 문자열을 추출하고 새 변수에 할당

키, 값을 읽고 값을 추출하려면 아래 파일을 반복하는 스크립트가 필요합니다. foo_key1,foo.com,/tmp/worker${Build_Number}는 키와 값을 다른 변수에 할당합니다(예: A="foo_key1",B="foo.com",C="/tmp/worker${Build_ 일련 번호 }").

cat abc.txt

foo_key1=foo.com|/tmp/worker${Build_Number}
foo_key2=goo.com|/tmp/manager${Build_Number}

아래 코드를 시도했지만 운이 없습니다.

while IFS== read -r key val ; do
    val=${val%\"}; val=${val#\"}; key=${key#export };
    A="$(cut -d'_' -f1 <<<"$key")"
    B="$(cut -d'_' -f1 <<<"$val")"
    C="$(cut -d'_' -f2 <<<"$val")"
    echo $A
    echo $B
    echo $C
  done < abc.txt

예상 출력:

foo_key1 
foo.com
/tmp/worker${Build_Number}

답변1

awk를 사용하여 3개의 열을 분할 =하거나 |인쇄한 다음 다음을 사용하여 read열을 변수에 할당 하면 됩니다.

awk -F '[=|]' '{print $1, $2, $3}' abc.txt | while read A B C; do
    echo $A
    echo $B
    echo $C
done

중괄호 앞에 정규식을 추가하여 데이터를 필터링할 수도 있습니다. 예를 들어 '/\S+/ {print $1, $2, $3}'정규식을 사용하여 공백이 아닌 문자를 1개 이상 일치시켜 빈 줄을 건너뜁니다.

답변2

당신은 시도 할 수 있습니다:

while IFS='|=' read A B C ; do
  echo "$A"
  echo "$B"
  echo "$C"
done < abc.txt

답변3

귀하의 코드는 다음 개정판의 이점을 누릴 수 있습니다.

#!/bin/bash

cat abc.txt | while IFS= read -r line ; do

A=$(echo $line | sed -e 's/=/ /g;s/|/ /g' |  awk '{print $1}')
B=$(echo $line | sed -e 's/=/ /g;s/|/ /g' |  awk '{print $2}')
C=$(echo $line | sed -e 's/=/ /g;s/|/ /g' |  awk '{print $3}')

    echo $A
    echo $B
    echo $C
  done

foo_key1
foo.com
/tmp/worker${Build_Number}
foo_key2
goo.com
/tmp/manager${Build_Number}

관련 정보