2017-09-07 1 views
1

쉘 스크립트를 사용하여 특정 열의 특정 데이터를 X로 마스크 아웃하려고합니다. 예를 들어 첫 번째 열을 마스크하여 새 파일에 X 만 갖기를 원합니다. 이 작업을 수행하는 가장 좋은 방법은 확실하지 않습니다.선택된 구분 된 열을 마스크 아웃

입력

DL1234, 454890, tall, A, A7, 1234, 457, Male, Active 

당신은 쉼표 자체 필드 분리와 awk를 사용하고 수정할 수 있습니다

XXXXXX, 454890, tall, A, A7, 1234, 457, Male, Active 

답변

2

원하는 출력 만 $1 :

s='DL1234, 454890, tall, A, A7, 1234, 457, Male, Active' 

awk 'BEGIN{FS=OFS=","} {gsub(/./, "X", $1)} 1' <<< "$s" 
XXXXXX, 454890, tall, A, A7, 1234, 457, Male, Active 
,

편집 :

업데이트하려면 여러 필드 :

awk -v cols='1,3,7' 'BEGIN{FS=OFS=", "} { 
n=split(cols, a, /,/); for (i=1; i<=n; i++) gsub(/./, "X", $a[i])} 1' <<< "$s" 

XXXXXX, 454890, XXXX, A, A7, 1234, XXX, Male, Active 

여기에 우리가 열 번호의 목록을 전달하는 명령 행 인수로 업데이트 할 수 있습니다.

+0

일반적으로 원하는 열 번호에 대한 루프를 사용할 수 있습니다. –

+0

@anubhava 안녕하세요, 네, 정말 고마워했습니다! 여러 열의 루프에서 작동하는 예가 있습니까? – Defcon

+0

@anubhava 안녕하세요 구분 기호가 '^^'경우 솔루션이 달라질 수 있습니다. 이것은 두 자일 것입니다. – Defcon

관련 문제