В моих первых 3 решениях я считаю, что вам нужно использовать переменные оболочки из значений строк A,B,C
, и вы не хотите просто печатать их, если это так, то вам могут помочь следующие (ие).
1-е решение: Он считает, что ваши переменные A,B,C
всегда идут с одним и тем же номером поля.
while read first second third fourth fifth sixth
do
echo $third,$fourth,$fifth ##Printing values here.
a_var=${third#*=}
b_var=${fourth#*=}
c_var=${fifth#*=}
echo "Using new values of variables here...."
echo "NEW A="$a_var
echo "NEW B="$b_var
echo "NEW C="$c_var
done < "Input_file"
Это просто печать значений переменных в каждой строке, так как вы НЕ сказали, что вы собираетесь делать с этими переменными, поэтому я просто печатаю их, вы можете использовать их в соответствии с вашим вариантом использования.
2-е решение: Это учитывает, что переменные идут в том же порядке, но проверяет, идет ли A на 3-м месте или нет, B идет на 4-мместо или нет и т. д. и печатает соответственно.
while read first second third fourth fifth sixth
do
echo $third,$fourth,$fifth ##Printing values here.
a_var=$(echo "$third" | awk '$0 ~ /^A/{sub(/.*=/,"");print}')
b_var=$(echo "$fourth" | awk '$0 ~ /^B/{sub(/.*=/,"");print}')
c_var=$(echo "$fifth" | awk '$0 ~ /^C/{sub(/.*=/,"");print}')
echo "Using new values of variables here...."
echo "NEW A="$a_var
echo "NEW B="$b_var
echo "NEW C="$c_var
done < "Input_file"
3-е решение: Что идеально подходит для ваших требований, не уверен, насколько эффективен код тисков (я до сих поранализ больше, если мы могли бы сделать что-то еще здесь).Этот код НЕ будет искать порядок A
, B
или C
в строке, он будет совпадать с ним, пусть они будут где-нибудь в строке, если найдено совпадение, он присвоит значение переменной ИЛИ иначе будет значение NULL.
while read line
do
a_var=$(echo "$line" | awk 'match($0,/A=[^ ]*/){val=substr($0,RSTART,RLENGTH);sub(/.*=/,"",val);print val}')
b_var=$(echo "$line" | awk 'match($0,/B=[^ ]*/){val=substr($0,RSTART,RLENGTH);sub(/.*=/,"",val);print val}')
c_var=$(echo "$line" | awk 'match($0,/C=[^ ]*/){val=substr($0,RSTART,RLENGTH);sub(/.*=/,"",val);print val}')
echo "Using new values of variables here...."
echo "NEW A="$a_var
echo "NEW B="$b_var
echo "NEW C="$c_var
done < "Input_file
Вывод будет следующим.
Using new values of variables here....
NEW A=one
NEW B=two
NEW C=three
Using new values of variables here....
NEW A=
NEW B=six
NEW C=
Using new values of variables here....
NEW A=eight
NEW B=eleven
NEW C=
EDIT1: В случае, если вы просто хотитечтобы напечатать значения A,B,C
, попробуйте следующее.
awk '{
for(i=1;i<=NF;i++){
if($i ~ /[ABCabc]=/){
sub(/.*=/,"",$i)
a[++count]=$i
}
}
print "A="a[1] ORS "B=" a[2] ORS "C="a[3];count=""
delete a
}' Input_file