列の文字を数値に変換

列の文字を数値に変換

2列の文字を数字に変換したいです。

以下の例では、2列と3列の文字を数字に変更したいと思います。つまり、Ainto 1Binto 2Cinto3ですG4

最初の列には文字とを含めることもできますA。これらはBCGいいえ変更されました。

/列は()で区切られています<space><slash><space>

Id_animal / Column1 / Column2
ID01 / A / B
ID02 / B / A
ID03 / C / A
ID04 / A / G

希望の出力は次のとおりです。

Id_animal / Column1 / Column2
ID01 / 1 / 2
ID02 / 2 / 1
ID03 / 3 / 1
ID04 / 1 / 4

答え1

  1. 列を 2 つのグループに切り捨てます。 1つは最初の列を含み、もう1つは2番目と3番目の列を含みます。

  2. 2番目のグループの文字を数字で反転します。

  3. すべてを再度貼り付けます。

コマンドラインから:

$ cat data
Id_animal / Column1 / Column2
ID01 / A / B
ID02 / B / A
ID03 / C / A
ID04 / A / G
ABCG / G / G

$ paste -d '/' <(cut -d '/' -f 1 data) <(cut -d '/' -f 2,3 data | tr 'ABCG' '1234')
Id_animal / 3olumn1 / 3olumn2
ID01 / 1 / 2
ID02 / 2 / 1
ID03 / 3 / 1
ID04 / 1 / 4
ABCG / 4 / 4

タイトルにボーナス番号が表示されます... :-)

答え2

A、B、C、Gのみを1、2、3、4に変換し、最初の列にこれらの文字が含まれていないと仮定すると、bgStack15の答えを次のように単純化できます。

tr 'ABCG' '1234' < input > output

答え3

必要に応じて変数を調整します。 `/home/Amanda/script.shのようなファイルに保存してください。

#!/bin/sh
infile=~/input.txt
outfile=~/output.txt
while read one two; do
   printf "%s %s\n" "${one}" "$( echo "${two}" | tr 'ABCG' '1234' )"
done < ${infile} > ${outfile}

スクリプトを実行可能にします。chmod +x /home/Amanda/script.sh

答え4

たとえば、次を使用して特定の入力列に音域をperl適用できます。map

perl -F"/" -alne 'print join "/", @F[0], map { tr/ABCG/1234/; $_ } @F[1,2]' input

例えば、入力が与えられると

Id_animal / Column1 / Column2
ID01 / A / B
ID02 / B / A
AG02 / B / A
ID03 / C / A
ID04 / A / G

それから

$ perl -F"/" -alne 'print $. == 1? $_ : join "/", @F[0], map { tr/ABCG/1234/; $_ } @F[1,2]' input
Id_animal / Column1 / Column2
ID01 / 1 / 2
ID02 / 2 / 1
AG02 / 2 / 1
ID03 / 3 / 1
ID04 / 1 / 4

関連情報