탈륨

탈륨

다음과 같은 거대한 텍스트 파일이 있습니다.

36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,3
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,8
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,14
36,53,15596,0.58454577855,0.26119,2.24878677855,0.116147072052964,12

원하는 출력은 다음과 같습니다.

36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-03
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-08
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-14
36,53,15596,0.58454577855,0.26119,2.24878677855,0.116147072052964,MI-12

여기와 다른 커뮤니티에서 다른 관련 게시물을 시도했지만 원하는 것을 얻을 수 없습니다.

고쳐 쓰다

이것은교차 문제(저는 Unix/perl 답변과 배치/powershell 솔루션을 원합니다.) 흥미로운 답변이 있습니다.

답변1

가까운스프린트 기능기능(앞에 0 추가):

awk -F, -v OFS=',' '$8=sprintf("MI-%02d",$8);' file

산출:

36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-03
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-08
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-14
36,53,15596,0.58454577855,0.26119,2.24878677855,0.116147072052964,MI-12

-F,- ,필드 구분자로 쉼표를 설정하세요.

$8- 여덟 번째 필드를 가리킵니다.

%02d- 함수 인수가 다음과 같이 처리되는 형식입니다.2-숫자


노트, 레코드의 마지막 필드는 를 통해 렌더링될 수 있습니다 $NF.

핵인자값이 현재 레코드의 필드 수인 미리 정의된 변수입니다.

따라서 (귀하의 입력에 대해)와 $NF동일합니다 .$8

awk -F, -v OFS=',' '$(NF)=sprintf("MI-%02d", $(NF))' file

답변2

다음을 사용해 볼 수 있습니다 awk.

awk 'BEGIN { FS = OFS = "," } { $NF = sprintf("MI-%02d", $NF); } 1' file

답변3

Perl 솔루션은 다음과 같습니다.

$ perl -F',' -lane '$last=$#F;$F[$last]=sprintf("MI-%02d",$F[$last]);print join ",", @F' input.txt                                       
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-03
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-08
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-14
36,53,15596,0.58454577855,0.26119,2.24878677855,0.116147072052964,MI-12

-a플래그를 사용하면 입력을 지정된 구분 기호를 기반으로 하는 배열로 처리할 수 있습니다 -F. 기본적으로 해당 배열의 마지막 항목을 변경하고 join명령을 통해 다시 빌드합니다.

답변4

탈륨

다음은 Tcl을 사용하여 수행된 내 솔루션입니다. input.csv 파일에서 읽고 결과를 output.csv 파일에 저장합니다.

set in [open input.csv]
set out [open output.csv w]

while {![eof $in]} {
   set line [gets $in]
   set last_comma_pos [string last , $line]
   puts $out [string range $line 0 $last_comma_pos][format MI-%02d [string range $line $last_comma_pos+1 end]]
}

close $in
close $out

데모

관련 정보