我如何使用array-bash

时间:2014-11-17 08:31:12

标签: arrays bash

我有太多这样的变量:

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,但它很难。

如何使用数组执行此操作?

2 个答案:

答案 0 :(得分: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 :(得分:1)

array[0]="$var1"
array[1]="$var2"
array[2]="$var3"
.
.

然后使用"用于"循环遍历该数组中的所有单元格并选择所需的部分。请注意,索引从零开始,即任何数组中的第一个单元格都在索引零中。