我有如下的大量数据
NDDDDTSVCLGTRQCSWFAGCTNRTWNSSA 0VCLGTRQCSWFAGCTNRTWNSSAVPLIGLP 0LTWSGNDTCLYSCQNQTKGLLYQLFRNLFC 0CQNQTKGLLYQLFRNLFCSYGLTEAHGKWR 0…
在任何UNIX机器上的任何shell中都有任何awk:
$ cat tst.awk BEGIN { chars = "ARNDBCEQZGHILKMFPSTWYV" for (i=1; i<=length(chars); i++) { char = substr(chars,i,1) map[char] = i } } { out = "" chars = $1 for (i=1; i<=length(chars); i++) { char = substr(chars,i,1) out = (out == "" ? "" : out " ") (char in map ? map[char] : char) } print out } $ awk -f tst.awk file 3 4 4 4 4 19 18 22 6 13 10 19 2 8 6 18 20 16 1 10 6 19 3 2 19 20 3 18 18 1 22 6 13 10 19 2 8 6 18 20 16 1 10 6 19 3 2 19 20 3 18 18 1 22 17 13 12 10 13 17 13 19 20 18 10 3 4 19 6 13 21 18 6 8 3 8 19 14 10 13 13 21 8 13 16 2 3 13 16 6 6 8 3 8 19 14 10 13 13 21 8 13 16 2 3 13 16 6 18 21 10 13 19 7 1 11 10 14 20 2 12 19 3 4 14 10 11 4 10 11 2 19 17 19 20 20 13 19 10 18 3 13 19 13 18 22 3 3 18 10 10 11 2 19 17 19 20 20 13 19 10 18 3 13 19 13 18 22 3 3 18 10 13 16 16 13 6 10 3 10 16 13 6 10 3 10 22 21 14 10 16 17 17 14 20 18 10 2 6 10 13 10 21 13 22 17 18 13 19 2 14 10 16 17 17 14 20 18 10 2 6 10 13 10 21 13 22 17 18 13 19 2 21 13 19 13 3 1 18 8 8 18 22 6 15 7 6 8 10 11 10 7 2 12 18 17 14 4 2 6 14 18 6 3 10 2 14 12 22 2
另一个 awk
awk
$ awk 'NR==FNR {a[$1]=$2; next} {n=length($1); for(i=1;i<=n;i++) printf "%s", a[substr($1,i,1)] (i==n?ORS:OFS)}' mapfile datafile 3 4 4 4 4 19 18 22 6 13 10 19 2 8 6 18 20 16 1 10 6 19 3 2 19 20 3 18 18 1 22 6 13 10 19 2 8 6 18 20 16 1 10 6 19 3 2 19 20 3 18 18 1 22 17 13 12 10 13 17 13 19 20 18 10 3 4 19 6 13 21 18 6 8 3 8 19 14 10 13 13 21 8 13 16 2 3 13 16 6 6 8 3 8 19 14 10 13 13 21 8 13 16 2 3 13 16 6 18 21 10 13 19 7 1 11 10 14 20 2 12 19 3 4 14 10 11 4 10 11 2 19 17 19 20 20 13 19 10 18 3 13 19 13 18 22 3 3 18 10 10 11 2 19 17 19 20 20 13 19 10 18 3 13 19 13 18 22 3 3 18 10 13 16 16 13 6 10 3 10 16 13 6 10 3 10 22 21 14 10 16 17 17 14 20 18 10 2 6 10 13 10 21 13 22 17 18 13 19 2 14 10 16 17 17 14 20 18 10 2 6 10 13 10 21 13 22 17 18 13 19 2 21 13 19 13 3 1 18 8 8 18 22 6 15 7 6 8 10 11 10 7 2 12 18 17 14 4 2 6 14 18 6 3 10 2 14 12 22 2
但是,没有指定未指定的缺失映射,即如果您在地图文件中未列出字符,则将忽略这些字符。
如果目标是加密,我会提出一个不同的方法:
首先让我们生成一个映射(或加密密钥)
$ key=$(printf "%s\n" {A..Z} | shuf | paste -sd' ' | tr -d ' ') $ echo "$key" CNYSGFRDKQTOXJVLEWBAHZPMUI
现在,您可以简单地加密/解密文件内容
$ tr [A-Z] "$key" < datafile > file.encrypted
并扭转
$ tr "$key" [A-Z] < file.encrypted > file.decrypted
显然,你需要保存密钥。