2014-09-18 2 views
1

특정 열에서 선행 0을 제거하고 동일한 수의 공백으로 채우기 방법.UNIX에서 특정 필드에 선행 0을 채우고 공백을 채우기

A001|XYZ|00001|00234|0090 
B001|XYZ|00010|00234|0990 
C001|XYZ|00321|00234|0345 
D001|XYZ|05001|00234|0777 

필드 3 및도 5는 정수 필드 및 출력 등 below-되어야하다

A001|XYZ|1....|00234|90.. 
B001|XYZ|10...|00234|990. 
C001|XYZ|321..|00234|345. 
D001|XYZ|5001.|00234|7... 

(공백을 나타내는 '.') awkprintf 사용

+0

읽기. 이전 질문에서 사용한 것과 같은 개념으로 올바른 형식 지정 문자열을 사용하여이 작업을 수행 할 수 있습니다. –

답변

2

아주 사소한 :

awk ' 
BEGIN { FS = OFS = "|" } 
{ len = length ($3) 
    $3 = sprintf ("%*-d", len, $3) 
    len = length ($5) 
    $5 = sprintf ("%*-d", len, $5) 
}1' file 
A001|XYZ|1 |00234|90 
B001|XYZ|10 |00234|990 
C001|XYZ|321 |00234|345 
D001|XYZ|5001 |00234|777 

필드의 길이를 식별하십시오. sprintf을 사용하여 값을 동일한 열에 지정하십시오. *을 사용하면 인수에서 가져온 필드 길이에서 필요한 공백 수를 캡처 할 수 있습니다. 모든 열에 대한

+1

감사 Jaypal. 이게 내 문제를 해결했다. –

0
sed ':again 
    s/^\(\([^|]*\|\)\{2\}\)0\([0-9]*\)/\1\3/
    t again 
    s/^\(\([^|]*\|\)\{4\}\)0\([0-9]*\)/\1\3/
    t again' YourFile 

쉽게 (필요한 경우)의 printf 서식 문자열에 대한

sed ':again 
    s/\|0\([0-9]*\)/\1 /g 
    t again' YourFile 
관련 문제