키, 값을 읽고 값을 추출하려면 아래 파일을 반복하는 스크립트가 필요합니다. 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}