在awk命令之外使用awk变量

时间:2017-09-08 11:19:38

标签: bash unix awk

命令

awk -F'\t' '{map[$1]=$4}' analytics-details-bkp-ga.txt
例如,

生成键值映射 键1 =值 key2 = value2 ......等等

我有一个for循环使用此映射来获取特定键的值

for i in `cat stores.txt`
 do
     .....
 done

我需要使用map for above for循环,如何使用它。我不想在awk命令中编写for循环。有人可以帮助你如何使用awk命令之外的awk命令生成的映射吗? / p>

2 个答案:

答案 0 :(得分:2)

如果你有bash >= 4,那么你可以使用关联数组

  

如果您可以发布样本输入和输出,简单的awk可以解决您的问题   问题

既然你说过

  

我需要使用map for above for循环,如何使用它。我不想这样做   在awk命令中写入for循环。

我建议使用bash关联数组,

示例输入

[akshay@localhost tmp]$ cat testfile 
foo bar
jack john
me you
now then
so me

脚本

[akshay@localhost tmp]$ cat test.sh
#!/usr/bin/env bash

declare -A assoc

while read -r col1 col2; do
    assoc["$col1"]=$col2;
done < testfile


for key in "${!assoc[@]}"; do
    echo "${key} ---> ${assoc[${key}]}"
done

输出

[akshay@localhost tmp]$ bash test.sh
jack ---> john
so ---> me
now ---> then
foo ---> bar
me ---> you

答案 1 :(得分:0)

您可以使用以下内容创建关联数组(例如,此处为map):

declare -A map
for i in $(awk -F'\t' '{map[$1]=$2} END{ for( key in map) {print key":"map[key] }}' file)
do
   key=${i%:*}
   value=${i#*:}
   map[$key]=$value 
done