1859115 2258379 24636 Yes 06S14028968 13 1 1 2
1859115 2258379 24636 Yes 06S14028968 13 1 1 2
1859116 2255037 21608 Yes 06S14028969 11 0 2 3
1859117 2268746 34027 Yes 06S14028970 10 0 2 1
위는 내 데이터 세트의 예입니다. 1을 2로 바꾸고 0을 1로 바꾸는 방식으로 7번째 열의 값을 바꾸고 싶습니다. 그래서 제가 기대하는 결과는 다음과 같습니다.
1859115 2258379 24636 Yes 06S14028968 13 2 1 2
1859115 2258379 24636 Yes 06S14028968 13 2 1 2
1859116 2255037 21608 Yes 06S14028969 11 1 2 3
1859117 2268746 34027 Yes 06S14028970 10 1 2 1
나는 이 접근법을 사용해 보았습니다.
awk 'NR==1{$10="Pheno";print;next}\
$7 == "1" {$10="2"};\
$7 == "0" {$10="1"}1' old.txt |column -t > new.txt
그런 다음 첫 번째 행을 제거합니다. 하지만 직접적인 방법이 필요합니다.
답변1
열 7 번째 값이 항상 0 또는 1이면 다음을 사용할 수 있습니다.
awk 'NR>1{ $7+=1 }1' infile
그렇지 않은 경우 값이 0 또는 1인지 확인하십시오.
awk 'NR>1 && $7 ~/^[01]$/ { $7+=1 }1' infile
수정된 값을 코드의 새 열로 추가하는 것 같습니다. 새 열에 인쇄해야 하는 경우 열 7번째 값 이 항상 0 또는 1이라는 동일한 가정으로 다음을 수행합니다.
awk '{ print $0, (NR==1?"Pheno":++$7) }' infile
그렇지 않으면:
awk '{ print $0, (NR==1?"Pheno":($7 ~/^[01]$/?++$7:"NA") ) }' infile
참고: $7 ~/^[01]$/
로 변경 ($7==1 || $7==0)
하면 단일 정수 숫자 0 또는 1만 확인하는 이전 숫자( )를 사용하는 대신 해당 값이 실제로 숫자인지 $7 ~/^[01]$/
확인하므로 결과적으로 1.0
or 0.0
또는 숫자 와 같은 부동 소수점 숫자에는 작동하지 않습니다. 000
또는 001
등과 같은 앞에 0이 있습니다 .