
2列の文字を数字に変換したいです。
以下の例では、2列と3列の文字を数字に変更したいと思います。つまり、A
into 1
、B
into 2
、C
into3
ですG
。4
最初の列には文字とを含めることもできますA
。これらはB
C
G
いいえ変更されました。
/
列は()で区切られています<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
列を 2 つのグループに切り捨てます。 1つは最初の列を含み、もう1つは2番目と3番目の列を含みます。
2番目のグループの文字を数字で反転します。
すべてを再度貼り付けます。
コマンドラインから:
$ 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