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로 바뀌도록 일곱 번째 열의 값을 바꾸고 싶습니다. 그래서 내 예상 결과는 아래와 같습니다.
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만 확인하므로 or 또는 or 등과 같은 앞에 0이 있는 숫자와 $7 ~/^[01]$/
같은 부동 소수점 숫자에는 작동하지 않습니다 . .1.0
0.0
000
001