2013-09-03 2 views
0

많은 데이터 필드가 포함 된 파이프 구분 파일이 있습니다. gawk를 사용하여 분리하려고합니다. 로그이 추천했습니다 :

United States|San Francisco|CA|...goes on... 
Germany|Quebec City|Quebec|...goes on... 

출력 형식과 같을 것이다 : 나는 자동 $ 1에게 $ 15 모든 방법을 높일 수있는 방법이 ...

Country: United States 
City: San Francisco 
State: CA 
...goes on... 

이다 질문? $ 16를 건너 뛰고 자동 증가를 다시 하시겠습니까? 난 그냥이와 하드 코드 내 둔한 스크립트를 원하지 않는다 :

print "Country:\t", $1 
print "City:\t", $2 
print "State:\t", $3 

답변

2

당신이 경우 루프와의를 사용할 수있는 조건 :

awk -v FS='|' ' 
    BEGIN{split("country;city;state",a,";")} 
    {for (i=1;i<NF;i++) if (i != 16) print a[i],i}' input 
+0

하나의 필드 만 건너 뛰므로 왜 루프를 분할하지 않습니까? 이렇게하면 if 문이 제거되어 더 빠른 처리가 가능합니다 (이론상). –

+0

멋진 솔루션, 분할 함수 및 for 루프가 처리됩니다. – user2675805

0

그것은 완전히 분명하지 않다, 그러나 당신의 잘린 입력과 같이 보이는 경우 :

United States|San Francisco|CA|Salem|OR... 

을하고 방금 열거하려고 도시/국가 쌍, 당신은 확실히 수행 할 수 있습니다

for(i = 2; i <= NF ;i+=2) { 
    print "City:\t", $i 
    print "State:\t", $(i+1) 
} 
+0

도시/주 쌍을 통해 열거하려고하지 않습니다. 나는이 형식으로 15 개의 데이터 필드를 나열하고 싶다 : 이름 : \ t, $ i. 그런 다음 16을 건너 뛰고 자동 증가를 다시하고 싶습니다. 나는 함수가 모든 라인부터 시작해서 다른 문자열로 만들어야한다고 생각하니? – user2675805

+0

이름의 출처는 어디입니까? 파일의 첫 줄에 있습니까? 16 번째 반복을 건너 뛰고 for 루프를 원하는 것처럼 들립니다. –

+0

아니요, 이름은 파일의 첫 번째 줄이 아닙니다. 각 필드에 대한 설명이있는 문서 – user2675805