2011-03-17 4 views
0

SQL 데이터를 분리 된 탭 또는 쉼표로 구분 된 형식의 텍스트로 내 보냈습니다.세 번째 열의 역 텍스트

2  AX  Mariehamn  Mariehamn  ACTIVE 2011-03-15 17:23:12  2011-03-15 17:23:12  SYSTEM Al-Ma 
4  DZ  Adrar Adrar ACTIVE 2011-03-15 17:23:12  2011-03-15 17:23:12  SYSTEM Al-Ad 
6  DZ  Ain Defla  Ain Defla  ACTIVE 2011-03-15 17:23:12  2011-03-15 17:23:12  SYSTEM Al-Ai 
8  DZ  Ain Temchent Ain Temchent ACTIVE 2011-03-15 17:23:12  2011-03-15 17:23:12  SYSTEM Al-Ai 
10  DZ  Shantanu Shantanu ACTIVE 2011-03-15 17:23:12  2011-03-15 17:23:12  SYSTEM Al-Al 

2,"AX","Mariehamn","Mariehamn","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Ma" 
4,"DZ","Adrar","Adrar","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Ad" 
6,"DZ","Ain Defla","Ain Defla","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Ai" 
8,"DZ","Ain Temchent","Ain Temchent","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Ai" 
10,"DZ","Shantanu","Shantanu","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Al" 

다른 열은 변경하지 않고 다음과 같이 세 번째 열의 텍스트를 역전해야합니다.

nmaheiraM 
rardA 
alfeD niA 
tnehcmeT niA 
unatnahS 

위의 (TAB 또는 CSV) 형식 중 하나를 사용할 수 있습니다.

답변

1

. CSV,

$ awk -F"," '{for(i=length($3);i>=1;i--){s=s substr($3,i,1)};$3=s;s=""}1' OFS="," file 
2,"AX","nmaheiraM","Mariehamn","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Ma" 
4,"DZ","rardA","Adrar","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Ad" 
6,"DZ","alfeD niA","Ain Defla","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Ai" 
8,"DZ","tnehcmeT niA","Ain Temchent","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Ai" 
10,"DZ","unatnahS","Shantanu","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Al" 

또는 당신은 (1.9+)

$ ruby -i.bak -F"," -nae '$F[2].reverse! if $F[2];print $F.join(",")' file 

업데이트 루비가있는 경우 : 당신이 AWK에 파일을 저장하려면 단지 예를 들어 임시 파일

로 리디렉션
awk -F"," '{for(i=length($3);i>=1;i--){s=s substr($3,i,1)};$3=s;s=""}1' OFS="," file > temp && mv temp file 

그리고 그런데 , sed에 그 -i 파일 "인플레 이스"

012,351을 절약하기 6,
+0

감사합니다. # sed에서 -e를 사용하여 파일을 대체 할 수 있습니다. awk에서 비슷한 것이 가능합니까? 또는 to.file을 저장 한 다음 파일을 다시 이동해야합니까? – shantanuo

+0

'perl -i.bak -F, -lape '$ F [2] = 역방향 $ F [2]; $ _ = join ",", @F 'file' – ikegami

+0

@ikegami, Perl 솔루션을 자신의 답변으로 게시하십시오. – kurumi

1

나는 또한 아마 AWK 함께 할 수


perl -pe "@_=split ',',$_;$_[2]=scalar reverse $_[2];$_=join ',',@_;" <1.csv >2.csv 

그것을 제안 할 수 있습니다,하지만 난 그것을 사용한 적이 없으니까.

업데이트 : 죄송합니다. cmd에서 작동했지만 배쉬를 확인하지 않았습니다. 배쉬의 경우는 다음과 같아야합니다

perl -aF/,/ -pe "\$F[2]=scalar reverse \$F[2];\$_=join ',',@F;" <1.csv 
+0

# 구문 오류 ## 컴파일 오류로 인해 -e 실행이 중단되었습니다. – shantanuo

+0

은 perl의'-a' 및'-F' 옵션을 사용하여 ('@ F' 배열로) 분할을 수행합니다 - http://perldoc.perl.org/perlrun.html#Command-Switches –

+1

필요가 없습니다 <를 사용하여 입력을 리디렉션합니다. 파일 이름을 perl의 인수로 전달하십시오. 일반적으로 이것은 파일 이름에 perl 액세스를 제공하기 때문에 더 나은 방법입니다. –

2

Text::CSV 참조 - 쉼표로 구분 된 값과 같은 조작,

use strict; 
use warnings; 
use Text::CSV; 
use Data::Dumper; 
my @mydata; 
my $csv = Text::CSV->new ({ binary => 1 }) # should set binary attribute. 
       or die "Cannot use CSV: ".Text::CSV->error_diag(); 
open my $fh, "<:encoding(utf8)", "test.csv" or die "test.csv: $!"; 
while (my $row = $csv->getline($fh)) { 
my $data = reverse($row->[2]); 
push(@mydata, $data); 
} 
print Dumper(\@mydata); 
$csv->eof or $csv->error_diag(); 
close $fh; 

출력 : 당신이 AWK를 사용할 수 있습니다

$VAR1 = [ 
      'nmaheiraM', 
      'rardA', 
      'alfeD niA', 
      'tnehcmeT niA', 
      'unatnahS' 
     ]; 
0

쉼표 또는 도표화 중 하나를 구분자로 파일을 처리하려면, 당신은 시도 할 수 있습니다 :

#!/usr/bin/perl 
use Modern::Perl; 
use Data::Dumper; 

my @rows; 
while(<DATA>) { 
    chomp; 
    my ($delim) = $_ =~ /(,|\t)/; 
    my @fields = split/,|\t/; 
    $fields[2] = reverse $fields[2]; 
    push @rows, join $delim, @fields; 
} 
say Dumper \@rows; 


__DATA__ 
2 AX Mariehamn Mariehamn ACTIVE 2011-03-15 17:23:12 2011-03-15 17:23:12 SYSTEM Al-Ma 
4 DZ Adrar Adrar ACTIVE 2011-03-15 17:23:12 2011-03-15 17:23:12 SYSTEM Al-Ad 
6 DZ Ain Defla Ain Defla ACTIVE 2011-03-15 17:23:12 2011-03-15 17:23:12 SYSTEM Al-Ai 
8 DZ Ain Temchent Ain Temchen ACTIVE 2011-03-15 17:23:12 2011-03-15 17:23:12 SYSTEM Al-Ai 
10 DZ Shantanu Shantanu ACTIVE 2011-03-15 17:23:12 2011-03-15 17:23:12 SYSTEM Al-Al 

2,"AX","Mariehamn","Mariehamn","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Ma" 
4,"DZ","Adrar","Adrar","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Ad" 
6,"DZ","Ain Defla","Ain Defla","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Ai" 
8,"DZ","Ain Temchent","Ain Temchent","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Ai" 
10,"DZ","Shantanu","Shantanu","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Al" 

출력 : -e 1 호선 근처 "TXT의 ["에서

$VAR1 = [ 
      '2 AX nmaheiraM Mariehamn ACTIVE 2011-03-15 17:23:12 2011-03-15 17:23:12 SYSTEM Al-Ma', 
      '4 DZ rardA Adrar ACTIVE 2011-03-15 17:23:12 2011-03-15 17:23:12 SYSTEM Al-Ad', 
      '6 DZ alfeD niA Ain Defla ACTIVE 2011-03-15 17:23:12 2011-03-15 17:23:12 SYSTEM Al-Ai', 
      '8 DZ tnehcmeT niA Ain Temchen ACTIVE 2011-03-15 17:23:12 2011-03-15 17:23:12 SYSTEM Al-Ai', 
      '10 DZ unatnahS Shantanu ACTIVE 2011-03-15 17:23:12 2011-03-15 17:23:12 SYSTEM Al-Al', 
      '', 
      '2,"AX","nmaheiraM","Mariehamn","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Ma"', 
      '4,"DZ","rardA","Adrar","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Ad"', 
      '6,"DZ","alfeD niA","Ain Defla","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Ai"', 
      '8,"DZ","tnehcmeT niA","Ain Temchent","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Ai"', 
      '10,"DZ","unatnahS","Shantanu","ACTIVE","2011-03-15 17:23:12","2011-03-15 17:23:12","SYSTEM","Al-Al"' 
     ]; 
관련 문제