2014-04-13 9 views
1

아래의 데이터가의 (a .awk 파일) 아래의 코드를 문자열AWK Multilines는

 
01 | 
0101001001 | 
DD-01-001-001-001/57 | 
1 | 
Vijay Raghavan | 
| 
3096 | 
Govind Industries | 
| 
| 
| 
| 
| 
| 
| 
    </EmployeeData> 


로 변환 할 :

#BEGIN {FS ="\n" ; RS="[</EmployeeData>]"} 
#{ 
#for (i=1; i<=NF; i++) 
#print $i"," 
#} 

에는 출력이 없습니다. 도와주세요. 미리 감사드립니다.

답변

1

몇 가지 잠재적 인 문제가있었습니다. 첫째, 사용 된 RS의 값이 일치시키려는 텍스트와 일치하지 않습니다 (출력이 없었던 이유입니다). 둘째로, print은 출력되는 텍스트의 끝에 자동으로 개행 문자를 넣기 때문에 결과는 여러 줄에 표시됩니다.

BEGIN {FS ="\n" ; RS="</EmployeeData>"} 
{ 
    for (i=1; i<=NF; i++) 
     printf "%s,",$i; 
    printf "\n"; 
} 
+0

"잘못된 문자 '오류입니다. * 나는. 또한, 선도 공백이) 윈도우하고 있어요"EmployeeData "라인이 AWK에서이 작업을 할 수있는 방법이 아니다 ... – user1955215

+0

. 더 나은 출발점을 위해 (Kent & Jotne & myself에 의해 게시 된) 다른 답변 중 하나를 참조하십시오 .RS를 1 문자 이상으로 설정하는 솔루션은 GNU-awk에만 한정됩니다. –

2

당신이 구분자로 ,을 좋아하는 경우에 할이 awk

awk -F"\n" -v RS="</EmployeeData>" '{$1=$1}1' file 
01 | 0101001001 | DD-01-001-001-001/57 | 1 | Vijay Raghavan | | 3096 | Govind Industries | | | | | | | | 

을 시도해보십시오 :

awk -F"\n" -v RS="</EmployeeData>" '{$1=$1;gsub(/ \| /,",")}1' file 
01,0101001001,DD-01-001-001-001/57,1,Vijay Raghavan,,3096,Govind Industries,,,,,,,, 
2
awk -v RS="" '{$1=$1}7' file 

를 ABO

다음 스크립트는 두 문제를 해결 ve 행은 모든 행을 하나로 통합합니다. </EmployeeData>

0

#은 awk 주석 시작 문자입니다. 게시 된 .awk 파일의 모든 행은 주석 처리되어 출력되지 않습니다. 또한 RS="[</EmployeeData>]"은 RS를 문자열 </EmployeeData>으로 설정하지 않으므로 원하는 것으로 생각하면 [] 문자 목록 구분 문자 </E m p l o y e D a t의 목록에있는 문자 중 하나로 설정합니다.

가 나는 이것이 당신이 정말로 무엇을 찾고 아마 생각 (GNU AWK는 멀티 문자의 RS에 사용) :

$ cat file 
01 | 
0101001001 | 
DD-01-001-001-001/57 | 
1 | 
Vijay Raghavan | 
| 
3096 | 
Govind Industries | 
| 
| 
    </EmployeeData> 
02 | 
0202002002 | 
DD-01-001-001-001/57 | 
1 | 
Bob Shmobswort | 
| 
1234 | 
Some Other Places | 
| 
| 
    </EmployeeData> 

.

$ cat tst.awk 
BEGIN{FS="[[:space:]]*[|][[:space:]]*"; OFS=","; RS="</EmployeeData>[[:space:]]*"} 
{ $1=$1; print } 

.

$ awk -f tst.awk file 
01,0101001001,DD-01-001-001-001/57,1,Vijay Raghavan,,3096,Govind Industries,,, 
02,0202002002,DD-01-001-001-001/57,1,Bob Shmobswort,,1234,Some Other Places,,, 
이가주고