如何使用数组 - 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,但这太难了。

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

目前还不清楚你在问什么,但我想这至少可以帮助你朝着正确的方向前进。

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
array[0]="$var1"
array[1]="$var2"
array[2]="$var3"
.
.

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

最新更新