2012-08-24 5 views
1
나는 순간에 할당하고있어

을하고 나에게 난처한 상황에 빠진 것 질문을 제외하고 해당 줄 번호를 삽입하는 명령은 다음과 같습니다awk는이 빈 줄

" 전에 해당 줄 번호를 삽입하는 awk 명령을 쓰기 위의 텍스트 파일의 각 줄. 빈 줄은이 경우 숫자가 이 아니어야합니다. "

답변이 있지만 각 구성 요소가하는 일에 대한 설명을 찾는 데 어려움을 겪고 있습니다.

명령은 다음과 같습니다

awk '{print (NF? ++a " " :"") $0}' <textfile.txt> 

나는 NF이 필드 번호 것을 알고, 그 $0 전체 입력 레코드를 의미합니다. 나는 명령을 가지고 무엇을하는지 알아 내려고 노력했지만, 무엇을 생략 할 때마다 항상 구문 오류가있는 것처럼 보입니다.

그럼 제 질문은 각 구성 요소가하는 일입니다. ++a의 기능은 무엇입니까? NF 이후 ?? 그리고 인용문이있는 비트는 무엇을합니까?

미리 감사드립니다.

+1

은 빈 줄이 계산해야하지만, 번호가 없습니다 :

awk 'BEGIN{count=1}{if($0~/^$/){print}else{print count,$0;count++}}' your_file 

는 아래 테스트? –

답변

1

지침 ... ? ... : ...if-else입니다.

if (NF > 0) { 
    ++a; 
    print a " " $0; 
} else { 
    print $0; 
} 

a이 필드 라인을 발견하는 경우에만 증가 변수입니다 : 그래서, 그것은 동일합니다.

+0

감사합니다. 훨씬 더 의미가 있습니다! – shans91

0
print (NF? ++a " " :"") $0 

3 자 연산자가 솔루션에 사용되었습니다. 빈 라인 NF는 NF 인 경우 0은 항상 그래서

cond?true case:false case 

이> 0 다음 또는 다른 인쇄 "" ++ 말한다 인쇄됩니다 다음 비 빈에 사용되는 1 씩 증가 a를 인쇄 한 후 라인 처리.

> cat temp.cc 
int main() 
{ 

} 
> awk 'BEGIN{count=1}{if($0~/^$/){print}else{print count,$0;count++}}' temp.cc 
1 int main() 
2 { 

3 } 
> 
+2

'a ++'가있는 당신의 설명은'++ a'를 가진 코드와 일치하지 않습니다. 변수'a'는 인쇄되기 전에 증가합니다. –

+0

awk는 숫자 컨텍스트에서 사용될 때 초기화되지 않은 변수를 0으로 취급하므로 begin 절이 필요하지 않습니다. 한 줄짜리 여백에서도 공백을 두려워하지 마십시오. 가독성이 중요합니다. awk과 비슷한 스타일로 작성 : awk '/^[[: space :]] * $/{print; 다음} {print ++ count, $ 0} 'file' –