awk,在花括号中执行cmds时的作用域

awk,在花括号中执行cmds时的作用域,awk,Awk,好的,我有一个文件 aaa|bbb|ccc eee|fff|ggg 我只想对“|”进行标记,并创建一个从一个索引val到另一个索引val的映射。 例如,如果键是第1列(不是基于零的索引),val是第3列,则我的映射应该是: aaa -> ccc eee -> ggg 如果您想在bash中创建一个映射数组: $ declare -A map $ while IFS='|' read -r key _ val; do map["$key"]="$val

好的,我有一个文件

aaa|bbb|ccc
eee|fff|ggg
我只想对“|”进行标记,并创建一个从一个索引val到另一个索引val的映射。 例如,如果键是第1列(不是基于零的索引),val是第3列,则我的映射应该是:

aaa -> ccc
eee -> ggg 
如果您想在bash中创建一个映射数组:

$ declare -A map
$ while IFS='|' read -r key _ val; do map["$key"]="$val"; done < file
$ declare -p map
declare -A map=([eee]="ggg" [aaa]="ccc" )
$declare-A映射
$while IFS='|'read-r key val;do映射[“$key”]=“$val”;完成<文件
$declare-p映射
声明-A映射=([eee]=“ggg”[aaa]=“ccc”)
但是,看看你是否正在考虑将其用于进一步的文本处理

如果您想在bash中创建一个映射数组:

$ declare -A map
$ while IFS='|' read -r key _ val; do map["$key"]="$val"; done < file
$ declare -p map
declare -A map=([eee]="ggg" [aaa]="ccc" )
$declare-A映射
$while IFS='|'read-r key val;do映射[“$key”]=“$val”;完成<文件
$declare-p映射
声明-A映射=([eee]=“ggg”[aaa]=“ccc”)

但是,看看您是否正在考虑将其用于进一步的文本处理。

awk
不是
bash
,它本身就是一种不同的编程语言,在其程序完成后,您无法访问awk在bash中创建的数组。如果你能在这里提供更多关于你的目标的信息,那么我们可能会在同样的方面帮助你,谢谢。我想编辑一个类似于:aaa | bbb | ccc eee | fff | ggg…标记化“|”,并创建从一个索引到另一个索引的映射,例如,aaa->ccc eee->ggg也许awk不是最好的选择。谢谢您当然,您可以在问题中随您的努力更新此内容,以便我们更好地理解它,谢谢。为什么不将您的代码移到
awk
中,而不是将值提取出来呢?Bash是一个shell。shell是一种创建/销毁文件和进程的工具,它使用一种语言对工具的调用进行排序。Awk是发明shell的人为shell调用来操纵文本而发明的工具。尝试在shell中进行文本操作(如果您正在这样做的话)是一个坏主意(例如,请参阅了解一些原因)。如果您认为在awk中编写文本处理代码比在shell中编写文本处理代码更麻烦,那么您就错了。
awk
不是
bash
,它本身就是一种不同的编程语言,在其程序完成后,您无法访问awk在bash中创建的数组。如果你能在这里提供更多关于你的目标的信息,那么我们可能会在同样的方面帮助你,谢谢。我想编辑一个类似于:aaa | bbb | ccc eee | fff | ggg…标记化“|”,并创建从一个索引到另一个索引的映射,例如,aaa->ccc eee->ggg也许awk不是最好的选择。谢谢您当然,您可以在问题中随您的努力更新此内容,以便我们更好地理解它,谢谢。为什么不将您的代码移到
awk
中,而不是将值提取出来呢?Bash是一个shell。shell是一种创建/销毁文件和进程的工具,它使用一种语言对工具的调用进行排序。Awk是发明shell的人为shell调用来操纵文本而发明的工具。尝试在shell中进行文本操作(如果您正在这样做的话)是一个坏主意(例如,请参阅了解一些原因)。如果您认为在awk中编写文本处理代码比在shell中编写更麻烦,那么您就错了。