在bash中将因子转换为数值

在bash中将因子转换为数值,bash,numeric-conversion,Bash,Numeric Conversion,在bash中,将因子向量(并非所有级别都是唯一的)转换为数字向量的最有效方法是什么?数值向量中的值并不重要,只要每个值表示因子的唯一级别 举例来说,这将是与我想在bash中所做的相同的R: 数值它很可能不是最有效的,但可能是一个开始 #!/bin/bash input_data=$( mktemp ) map_file=$( mktemp ) # your example written to a file echo -e "AV1019A\nABG1787\nAV1019A\nB77h

在bash中,将因子向量(并非所有级别都是唯一的)转换为数字向量的最有效方法是什么?数值向量中的值并不重要,只要每个值表示因子的唯一级别

举例来说,这将是与我想在bash中所做的相同的R:


数值它很可能不是最有效的,但可能是一个开始

#!/bin/bash

input_data=$( mktemp ) 
map_file=$( mktemp )

# your example written to a file 
echo -e "AV1019A\nABG1787\nAV1019A\nB77hhA\nB77hhA" >> $input_data 

# create a map <numeric, factor> and write to file
idx=0
for factor in $( cat $input_data | sort -u )
do 
    echo $idx $factor
    let idx=$idx+1
done > $map_file 

# go through your file again and replace values with keys 
while read line
do 
    key=$( cat $map_file | grep -e ".* ${line}$" | awk '{print $1}' )
    echo $key
done < $input_data 

# cleanup 
rm -f $input_data $map_file
#/bin/bash
输入数据=$(mktemp)
映射文件=$(mktemp)
#您的示例已写入文件
echo-e“AV1019A\nABG1787\nAV1019A\nB77hhA\nB77hhA”>>$input\U data
#创建映射并写入文件
idx=0
对于$中的系数(cat$输入|u数据|排序-u)
做
echo$idx$因子
设idx=$idx+1
完成>$map\u文件
#再次浏览文件并用键替换值
读行时
做
key=$(cat$map_文件| grep-e“*${line}$”| awk'{print$1}')
echo$键
完成<$input_数据
#清理
rm-f$input\U data$map\U文件
我最初想使用关联数组,但它只是Bash4+的一个特性,在这里和那里都不可用。如果您有bash4,那么您就少了一个文件,这显然更有效

#!/bin/bash

# your example written to a file 
input_data=$( mktemp )
echo -e "AV1019A\nABG1787\nAV1019A\nB77hhA\nB77hhA" >> $input_data 

# declare an array 
declare -a factor_map=($( cat $input_data | sort -u | tr "\n" " " ))

# go through your file replace values with keys 
while read line
do 
    echo ${factor_map[@]/$line//} | cut -d/ -f1 | wc -w | tr -d ' '
done < $input_data 

# cleanup 
rm -f $input_data
#/bin/bash
#您的示例已写入文件
输入数据=$(mktemp)
echo-e“AV1019A\nABG1787\nAV1019A\nB77hhA\nB77hhA”>>$input\U data
#声明数组
declare-a factor_map=($(cat$input_data | sort-u | tr“\n”“))
#检查文件并用键替换值
读行时
做
echo${factor_map[@]/$line/}| cut-d/-f1 | wc-w | tr-d''
完成<$input_数据
#清理
rm-f$输入数据

尝试添加一些示例来说明这一点。“数字向量中的值并不重要,只要每个值都表示因子的唯一级别”——散列如何?没有bash内置程序,只需调用您最喜欢的hasher即可<代码>echo AV1019A | sha1sum或
echo AV1019A | sum
。在这种情况下,什么是一个因素???