두 열의 문자를 숫자로 변환하고 싶습니다.
아래 예 에서는 2열과 3열의 문자를 숫자로 변경하고 싶습니다. 즉, A
into 1
, B
into 2
, C
into 3
입니다 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
열을 두 그룹으로 자릅니다. 하나는 첫 번째 열을 포함하고 다른 하나는 두 번째 및 세 번째 열을 포함합니다.
두 번째 그룹의 문자를 숫자로 음역합니다.
모든 것을 다시 붙여 넣으십시오.
명령줄에서:
$ 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