열의 문자를 숫자로 변환

열의 문자를 숫자로 변환

두 열의 문자를 숫자로 변환하고 싶습니다.

아래 예 에서는 2열과 3열의 문자를 숫자로 변경하고 싶습니다. 즉, Ainto 1, Binto 2, Cinto 3입니다 G.4

첫 번째 열에는 문자 및 가 포함될 수도 있습니다 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. 두 번째 그룹의 문자를 숫자로 음역합니다.

  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

관련 정보