2014-03-25 4 views
0

캡처하고 특정 열을 마스크하는 스크립트를 작성하려고합니다. 일반 텍스트로 4 열을 가져야하며 출력 파일에도 마스크해야합니다. 잘 모르겠습니다. 방법capture-specific-columns 및 열을 마스크하십시오.

input.txt 
--------- 
AA | BB | CC | 123456 

output.txt 
--------- 
BB | 123456 | 12xx56 

스크립트 아래의 명령이나 새 명령을 재 작성에 Pls는 저를 도와

동일한 열을 마스크 내가 쓴

cat input.txt | nawk -F '|' '{print $2 "|" $4 "|" $4} >output.txt 
+0

열 4의 값은 항상 6 문자가됩니까? 그렇지 않은 경우 샘플을 편집하여 다른 크기로 발생할 것으로 예상되는 것을 나타냅니다. 행운을 빕니다. – shellter

+0

4 번째 열의 값은 고정 길이입니다. 항상 6 자입니다. – user3326101

답변

0
nawk -F '|' '{print $2 "|" $4 "|" substr($4, 1,3) "xx" substr($4,6,2)}' input.txt > output.txt 
당신이 정말로 선행 및 후행 공백을 필요로하지 않는 가정 16,

출력

BB | 123456| 12xx56 

, 나는 echo "..."를 사용

echo "AA | BB | CC | 12345678" \ 
| awk -F '|' '{gsub(/ */, "", $0) 
    #dbg print "length$4=" (length($4)-4) 
    masking=sprintf("%"(length($4)-4)"s", " ") ; gsub(/ /, "x", masking) 
    print $2 "|" $4 "|" substr($4, 1,2) masking substr($4,(length($4)-1),2) 
}' 

BB|12345678|12xxxx78 

nawk -F '|' '{gsub(/ */, "", $0);print $2 "|" $4 "|" substr($4, 1,2) "xx" substr($4,5,2)}' input.txt > output.txt 

cat output.txt 
BB|123456|12xx56 

최종 솔루션을 만들 것 테스트 프로세스를 간소화합니다. 당신은 그것을 밖으로 가지고 간다 input.txt > output.txt와 선의 끝으로 교환 하거든 이전 같이 일할 것이다.

(length($4)-1)을 추가하여 $ 4에있는 단어의 길이에 따라 동적 인 $ 4에서 마지막 두 번째 문자의 위치를 ​​동적으로 설정했습니다.

IHTH

+0

예. xx로 마스킹하는 명령에서 나는 마스크 할 열을 마스크해야합니다. – user3326101

+0

열이 고정되어 있지 않고 마지막으로 유지해야한다고 가정합니다. 출력에서 2 자리 숫자와 처음 2 자리 숫자는 모두 xxxxxx 여야합니다. 그러면 명령어가 어떻게 될까요? – user3326101