쉘 스크립트의 필드에서 "-"를 모두 제거하십시오.

쉘 스크립트의 필드에서 "-"를 모두 제거하십시오.

아래는 내 csv 파일이며 Retailer_id 필드에서 -를 모두 제거하고 새 csv를 만들고 싶습니다.

>IPAY_USER_ID,RETAILER_ID,CUST_FIRST_NAME,CUST_LAST_NAME,CUST_MIDDLE_NAME,ACTIVATION_ACTOR_ID,DATE_OF_BIRTH,GENDER,EMAIL_ID,MOBILE_NO,CUSTOMER_CATEGORY,CUST_STATUS,WALLET_TYPE,MOBILE_CIRCLE,MPIN_EXPRY_DATE,R_MOD_ID,R_MOD_TIME,R_CRE_ID,CREATION_DATE,CREATION_TIME,RETAILER_UPGRADE_REG_DATE,RETAILER_UPGRADE_REG_TIME,DEDUP2_DATE,DEDUP2_TIME,DATA_ENRICHMENT_DATE,DATA_ENRICHMENT_TIME,BLACKLIST_DATE,BLACKLIST_TIME,DEDUP3_DATE,DEDUP3_TIME,KYCN_P_Registration_Mode,CHANNEL,TD_PD_STATUS,DEFAULT_MPIN_CHANGED_OR_NOT,UPGRADE_CHANNEL,UPGRADE_STATUS,LAST_TXN_DATE,KYCF_CONVERSION_DATE,KYCF_CONVERSION_TIME,NOMINEE_NAME,RELATION_CODE,BALANCE,SEEDING AUTHORISATION ID
22909943,--,RAL,WAL,,0,08/jan/1997,,[email protected],9923,,ACTIVE,NOKYC,RJ,2025-08-27 21:19:30,22909943,2015-11-05 17:21:17,22909943,2015-08-27,21:19:30,,,,,,,2015-11-05,17:21:17,,,SELF,WEB,,-,,PENDING,2015-08-27 21:19:30,,,,,0,

답변1

awk -F , -v OFS=, '{gsub(/-/, "", $2); print}' < in.csv > out.csv

답변2

sed -i 's/--//g'  in.cvs > out.cvs

답변3

나는 sed그것을 사용할 것이다.

$ sed -r -i 's/^([0-9]+,)--,/\1,/g' file.csv

그러나 나는 Stéphane의 답변을 좋아합니다. RETAILER_ID예를 들어 필드가 10번째 필드인 경우 정규식은 sed훨씬 더 보기 흉해 보입니다.

답변4

아마도 Perl에서 이 작업을 수행할 것입니다. 명명된 필드에서 선택할 수 있기 때문입니다.

#!/usr/bin/env perl
use strict;
use warnings;

#read header row from "STDIN" (or file on command line); 
chomp ( my @header = split /,/, <> );
#print it
print join ",", @header, "\n";
#iterate STDIN or file on command line - line by line
while ( <> ) {
    #declare a row
    my %this_row;
    #strip trailing linefeed (optional, given you need to reinsert it)
    chomp;
    #select fields in this row, into named fields based on the header row. 
    @this_row{@header} = split /,/;
    #apply regex to just RETAILER_ID
    $this_row{'RETAILER_ID'} =~ s/--//;
    #print row. map is unnecessary if you've always got a full set of fields.  
    #I've included it because your sample data didn't. 
    print join ( "," , map { $_ // '' } @this_row{@header} ),"\n";
}

한 줄보다 조금 길지만 sed원하는 경우 한 줄로 만들 수도 있습니다.

이 스크립트는 <>다음을 읽는 매직 파일 핸들인 -를 사용하기 때문에누구나STDIN 또는 명령줄에 지정된 파일 grepsed하지만 이것이 perl -i목표라면 계속해서 편집할 수 있다는 의미입니다. 아니면 출력을 리디렉션하면 됩니다.

관련 정보