이것과 매우 유사한 작업을 수행해야 합니다.문자열을 순차 인덱스로 교체, 그러나 열에 숫자를 추가할 필요는 없지만 전체 열을 증분 숫자로 대체합니다. 이와 같이:
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-VTAB
$ 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
명령은 각 줄 앞에 줄 번호와 탭을 추가하여 주소가 지정된 줄을 인쇄합니다. 이는 탭으로 구분된 형식에 적합합니다.