2016-09-02 7 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を取得しています:名以下このことから 私は4と3

vm16_DSC_Instance_4 
vm19_DSC_Instance_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

結果を格納し、この単純な作業

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と配列を持つ別のアプローチのための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

与えられた入力にスペースが1つしかないので、 'sed 's /.* \([0-9] \)。*/\ 1 /' file'もうまくいくでしょう。 – Sundeep

+1

@spasicスペース以外の文字から開始します。 – SLePort

関連する問題