이것과 매우 유사한 작업을 수행해야 합니다.문자열을 순차 인덱스로 교체, 그러나 열에 숫자를 추가하는 대신 전체 열을 증가하는 숫자로 바꿉니다. 이와 같이:
0 0 chr1 3000575 3000801 0 chr1 4340023 4340249 32 32
0 0 chr1 3000641 3000801 -1 chr1 3311943 3311783 32 32
0 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
0 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
0 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
~이 되다
0 0 chr1 3000575 3000801 0 chr1 4340023 4340249 32 32
1 0 chr1 3000641 3000801 -1 chr1 3311943 3311783 32 32
2 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
3 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
4 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
(0으로 시작하든 1로 시작하든 상관없습니다.)
바보 같은 느낌이 들지만 이 문제에 대한 해결책을 내 상황에 적용할 수는 없습니다...
답변1
행에 번호를 매기려면 다음을 사용할 수 있습니다 nl
. 열을 제거하거나 유지하려는 열을 필터링하려면 다음을 사용할 수 있습니다 cut
.
$ cut -f 2- cols.txt | nl
1 0 chr1 3000575 3000801 0 chr1 4340023 4340249 32 32
2 0 chr1 3000641 3000801 -1 chr1 3311943 3311783 32 32
3 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
4 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
5 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
유일한 짜증나는 점 nl
은 줄 시작 부분에 공백 패딩을 삽입한다는 것입니다(기본적으로 줄 번호 필드의 너비는 6자이며 줄 번호가 잘리므로 이 너비를 낮추고 싶지는 않습니다). 다음과 같이 이러한 문제를 제거할 수 있습니다.
$ cut -f 2- cols.txt | nl | sed 's/^ *//'
1 0 chr1 3000575 3000801 0 chr1 4340023 4340249 32 32
2 0 chr1 3000641 3000801 -1 chr1 3311943 3311783 32 32
3 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
4 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
5 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
이 cut
유틸리티는 입력에서 "제거"하려는 열 목록을 가져옵니다. 우리의 경우에는 2열 이후( )입니다 -f 2-
. 데이터가 탭으로 구분되어 있으므로 cut
이를 수정하기 위해 수정할 필요가 없습니다. 그렇지 않으면 다른 구분 기호를 사용하도록 지시할 수 있습니다 -d
.
이 sed
명령은 단순히 줄 시작 부분의 공백을 대체합니다 nl
.
답변2
그리고awk
$ awk '{$1=FNR-1; print}' OFS='\t' file
0 0 chr1 3000575 3000801 0 chr1 4340023 4340249 32 32
1 0 chr1 3000641 3000801 -1 chr1 3311943 3311783 32 32
2 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
3 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
4 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
답변3
With( 대체 시 ed
리터럴 탭 문자 사용 , Ctrl-V+로 구성)TAB
$ ed -s file << EOF
,s/0 //
,n
q
EOF
1 0 chr1 3000575 3000801 0 chr1 4340023 4340249 32 32
2 0 chr1 3000641 3000801 -1 chr1 3311943 3311783 32 32
3 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
4 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
5 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
이 (.,.)n
명령은 각 줄 앞에 줄 번호와 탭 문자를 추가하여 지정된 줄을 인쇄합니다. 이는 탭으로 구분된 형식에 이상적입니다.