2016-09-20 5 views
-1

파일에 대한 많은 계산을 수행하는 ksh 스크립트 (gawk를 많이 사용함)에 많은 기능이 있습니다. 파일은 파이프 삭제됨 그러나 파일에 지금 내 소스 파일이 변경되었습니다. 이제 각 필드는 다음과 같이 따옴표로 제공됩니다. 을 또한, 나는 어떤 경우 선행 및 후행 공백이나 탭을 손질해야합니다.앞과 뒤를 지우는 방법 ", ksh의 각 필드에서 앞과 뒤의 공백을 제거합니다

Old_Myfile.txt 

Name|Designation|emlid 
Alex|Software Design Engg|E0023 
Corner|SDE|E0056 

New_Myfile.txt 

"Name"|"Designation"|"emlid" 
"Alex"|"Software Design Engg"|" E0023" 
"  Corner "|"  SDE"|" E0056 " 

이 될 것입니다 방법을 제안하십시오 이미 작성한 스크립트와 호환됩니다.

+1

HuMMM, 어디 코드 ? –

+0

인용 된 입력란에'|'를 사용할 수 있습니까? 예 : ' "Alex"| "Software | Design | Engg"| "E0023"'. –

답변

0

이 스크립트는 필요 이상으로 엔지니어링 될 수 있지만 나중에 추가 로직을 추가해야하는 경우 (for 루프 내에서) 개별적으로 각 필드에서 작동합니다. 당신의 인용 필드는 기존의 awk 스크립트 내에서 다음 |의를 포함하는 첫 번째 줄이를 추가 할 수없는 경우

BEGIN{ 
    FS="|"; 
    OFS="|"; 
} 

{ 
    for(i=1; i<=NF; i++){ 
    gsub(/(^"[ ]*|[ ]*"$)/, "", $i); 

    if (i == NF) { 
     printf("%s\n", $i); 
    } 
    else { 
     printf("%s%s", $i, OFS); 
    } 
    } 
} 

여기 출력

$ awk -f /tmp/script.awk </tmp/input.txt 
Name|Designation|emlid 
Alex|Software Design Engg|E0023 
Corner|SDE|E0056 
+0

gsub (/ (^ "[] * | [] *"$) /, "", $ i); – user6613676

+0

이 솔루션을 사용했습니다. gsub (/ (^ "[] * | [] *"$) /, "", $ i); 이것은 아래 결과를 제공합니다 : 공백이 필드의 양쪽에 있으면 한 면만 자릅니다. 공백은 선행 공백입니다. 스크립트를 다음과 같이 수정해야했습니다. gawk -F "|" '{OFS = "|" } (i = 1; i <= NF; i ++)에 대해 for (i = 1; i <= NF; i ++) sub (/ \ "$ /," "$ i) sub (/^\ "/," ", $ i); } {0 (i = 1; i <= NF; i ++) sub (/^[[공간 :]] + | [[공간 :]] + $ /, ""$ i) } } {print $ 0} '$ 1 또는 (|) 옵션이 예상대로 작동하지 않는 이유는 무엇입니까? – user6613676

+0

왜'gsub'를'sub'로 바꿨습니까? 'gsub'는 각 행에 대해 각 항목을 "전역 적으로"대체합니다. 이것은 각각'sub' 연산을하는 두 개의 for-loops를 가지는 것보다 낫습니다. 또한'gawk -F '|''와'gawk'BEGIN {FS = "|"... ''사이에는 차이점이 없습니다. 네가 몰랐을 때를 대비해. 귀하의 정규식에 관해서는, 제공된 정규식이 감싸 인 것처럼 괄호 안에 포장하십시오. 또한 왜 스크립트를 수정해야하는지 잘 모르겠습니다. 게시물의 출력은 예상 한 결과입니다. 맞습니까? 누락 된 엣지 케이스는 무엇입니까? 그 (것)들을 제공하는 배려? – wpcarro

2

sed

$ sed 's/ *" *//g' file 

Name|Designation|emlid 
Alex|Software Design Engg|E0023 
Corner|SDE|E0056 

은이 추가 단계가 없어도 awk 스크립트에서 결합 될 수 있습니다.

+1

thx,'-r'을 삭제했습니다. – karakfa

0

입니다 :

awk ' 
{ gsub(/[[:space:]]*"[[:space:]]*/,"") } 
<existing script> 
'