2014-11-17 3 views
-1

У меня есть слишком много переменных, как это:Как использовать массив - Баш

var1="FACEBOOK" 
var2="TWITTER" 
var3="INSTAGRAM" 
... 

И мне нужно, чтобы найти последнюю строку о моих переменных, как это:

var1_last=$(tail -n +1 logfile.txt | awk '$9 ~ "FACEBOOK" {print $0}' | tail -n1) 

И мне нужно изменить этот вывод так:

day=${var1_last:8:2} 
month=${var1_last:4:3} 
year=${var1_last:20:4} 
hour=${var1_last:11:2} 
min=${var1_last:14:2} 

if [ "$month" == "Jan" ];then 
month=01 
... 

Но я не имею только несколько переменных, у меня есть так много переменных, и мне нужно сделать это для всех переменных , Я могу сделать копию/вставить все строки и изменить var1 на var2, но это так сложно.

Как это сделать с помощью массива?

ответ

1

Это совсем не ясно, о чем вы просите, но я думаю, это могло бы по крайней мере помочь подтолкнуть вас в правильном направлении.

array=("FACEBOOK" "TWITTER" "INSTAGRAM") 
for var in "${ARRAY[@]}"; do 
    last="$(tail -n +1 logfile.txt | awk '$9 ~"'"$var"'"' | tail -n 1)" 
    : 
done 

Все это имеет смысл в качестве чистого сценария Awk.

awk 'BEGIN { a[1] = "FACEBOOK"; a[2] = "TWITTER"; a[3] = "INSTAGRAM" } 
    1==NR { next } 
    $9 in a { b[$9] = $0 } # parse the line into individual fields here 
    END { for (k in b) print b[k] }' logfile.txt 
1
array[0]="$var1" 
array[1]="$var2" 
array[2]="$var3" 
. 
. 

Затем с помощью «для» в цикле по всем ячейкам в этом массиве и выбрать часть, которую вы хотите. Обратите внимание, что индекс начинается с нуля, т. Е. Первая ячейка в любом массиве находится в нулевом индексе.

Смежные вопросы