예를 들어, 시퀀스_테스트라는 텍스트 파일에 다음 시퀀스가 있습니다. AAAAATGATGATGTGATTAAATTTTTGAGTGATATGATATTTTTAGATATGAGTAGGATAGTATAGATAG
모든 "A" 문자의 위치 번호를 찾아 출력으로 반환하고 싶습니다. 이 작업을 수행하려면 어떤 명령을 사용해야 합니까?
답변1
$ fold -w 1 file | sed -n '/A/='
1
2
3
4
5
8
11
16
19
20
21
28
30
34
36
39
41
47
49
51
53
56
59
62
64
67
69
71
73
이는 fold
입력된 각 문자를 file
자신의 줄로 변환한 후 sed
각 줄의 줄 번호를 출력하는 데 사용됩니다 A
.
이 sed
명령은 와 같은 다른 명령으로 대체될 수 있습니다 awk '/A/ { print NR }'
.
물론 특수한 용도 awk
도 가능합니다. 다음은 substr()
각 문자를 차례로 추출하고 해당 문자의 위치를 출력하는 데 사용됩니다(있는 경우) A
.
awk '{ for (i = 1; i <= length; ++i) if (substr($0,i,1) == "A") print i }' file
쉼표로 구분된 목록의 모든 숫자를 원하는 경우 위 결과를 에 전달하세요 paste -s -d, -
.
답변2
사용행복하다(이전 Perl_6)
~$ raku -ne '.from.put for m:g/A/;' file
한 줄의 파일만 있는 경우 위의 간단한 코드를 사용할 수 있습니다. 이 .from
호출은 일치가 시작되는 위치(인덱스 0)를 알려줍니다. 또는 .to
경기가 끝난 곳으로 돌아가는 방법을 사용할 수 있습니다. 어느 쪽이든 위치는 한 줄에 하나씩 반환됩니다.
여러 줄의 파일이 있는 경우 일치하는 문자가 어디에 있는지 알고 싶을 것입니다.각 라인. 다음 코드는 해시 배열을 생성하며 그 역할은 다음과 같습니다.
~$ raku -ne 'state %a; state $i; $i++; for m:g/A/ { %a.push: $i => $_.from }; END .say for %a.sort;' file
샘플 입력(OP의 샘플 뉴클레오티드 서열, 사이에 빈 줄이 있는 두 번):
AAAAATGATGATGTGATTAAATTTTTGAGAGTGATATGATATTTTTATAGATATGAGTAGGATAGTATAGATAG
AAAAATGATGATGTGATTAAATTTTTGAGAGTGATATGATATTTTTATAGATATGAGTAGGATAGTATAGATAG
예제 출력:
1 => [0 1 2 3 4 7 10 15 18 19 20 27 29 33 35 38 40 46 48 50 52 55 58 61 63 66 68 70 72]
3 => [0 1 2 3 4 7 10 15 18 19 20 27 29 33 35 38 40 46 48 50 52 55 58 61 63 66 68 70 72]
일반적으로 .say
사람이 읽을 수 있는 출력을 제공하기 위해 Raku에서 사용되지만 긴 시퀀스(99개 이상의 요소)가 잘리기 .put
때문에 제작 에 권장됩니다..say
위에서 참고 사항: 각 행(첫 번째 행이라고 가정)에 대한 결과만 반환하려면 다음과 같이 END .say for %a.sort
해당 키를 호출하여 <1>
관련 값을 반환하도록 위의 코드를 변경합니다.END .put for %a<1>;
출력 예(사용법 END .put for %a<1>;
):
0 1 2 3 4 7 10 15 18 19 20 27 29 33 35 38 40 46 48 50 52 55 58 61 63 66 68 70 72