2016-09-02 1 views
1

2 라인을 포함하는 파일을 가지고 있고 각 라인에서 특정 문자를 얻고 싶습니다.특정 라인에서 특정 문자 가져 오기 및 변수에 저장

내 파일 :

vm16_DSC_Instance_4 dsc-sig=172.16.17.14;Public=10.10.72.15;dsc-InterInstance=172.16.18.14;dsc-OAM=172.16.16.19 
vm19_DSC_Instance_3 dsc-sig=172.16.17.15;Public=10.10.72.14;dsc-InterInstance=172.16.18.15;dsc-OAM=172.16.16.20 

요구 사항 : 여기 내가 한 번에 4와 3을 얻고있다 : 이에서 이름 아래 난

vm16_DSC_Instance_4 
vm19_DSC_Instance_3 

현재 4와 같은 번호 3. 원하는 . 나는 1 라인에서 4를 가져 가고 몇 가지 작업을하고 싶습니다. 그리고 나서 2 라인에서 3을 취해 어떤 작업을 할 것입니다. 기본적으로 카운터에 따라 1 또는 2 행 숯을 얻을 수 있습니다.

cat /tmp/tmp_inst_tmp |awk '{print $1}' | cut -d'_' -f4 
4 
3 
+1

질문이 명확하지 않습니다. -하지만 카운터에 따라 1 위 또는 2 위를 얻고 싶습니다. ' 필요한 출력 게시 – sjsam

+0

질문 업데이트 – samir

+0

왜 결과를 배열에 저장하고 나중에 처리하는 데 사용합니까? – sjsam

답변

0

결과를 저장하고이 간단한 작업 sed를 사용하는 배열을 사용

array=($(sed -E 's/^[^[:blank:]]*_([[:digit:]]+)[[:blank:]]+.*$/\1/' file)) 
for i in "${array[@]}" 
do 
# Do some task with "$i" 
done 

마음을 가진 [ useless use of cat ]

0

또 다른 방법 SED 및 배열 :

while read -r num; do 
    arr+=("$num") 
done < <(sed 's/^[^ ]*\([0-9][0-9]*\) .*/\1/' file) 

echo ${arr[0]} 
4 
echo ${arr[1]} 
3 
+0

주어진 입력에 오직 하나의 공백이 있기 때문에'sed 's /.* \ ([0-9] \). */\ 1 /'file' 역시 작동합니다. – Sundeep

+1

@spasic 비 공백 문자부터 시작합니다. – SLePort