#!/usr/bin/perl -t use 5.001 ; use strict ; use warnings ; # 5.011 ã§å‹•ä½œç¢ºèª use Getopt::Std ; getopts './:svM:', \my%o ; use Term::ANSIColor qw[ :constants ] ; $Term::ANSIColor::AUTORESET = 1 ; my $sep = $o{'/'} // "\t" ; # åŒºåˆ‡ã‚Šæ–‡å— ç¾çжã€å…¥åŠ›åŒºåˆ‡ã‚Šã®æ£è¦è¡¨ç¾ã¨ã—ã¦æ‰±ã‚れã€å‡ºåŠ›ã®åŒºåˆ‡ã‚Šã¨ã—ã¦ã‚‚使ã‚れる。 my $emp0 = $o{'.'} ? '=' : '' ; # 凹んã§ã„ãŸç®‡æ‰€ã«æ–°ãŸãªã‚»ãƒ«ã‚’å…¥ã‚Œã‚‹å ´åˆã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã‚‹æ–‡å—列 my $emp1 = $o{'.'} ? '.' : '' ; # 空文å—列ã®ã‚»ãƒ«ã«å…¥ã‚Œã‚‹æ–‡å—列 my @mat ; # 入力ã®è¡Œåˆ—ã‚’æ ¼ç´ã™ã‚‹ã€‚ my $maxind = 0 ; #å…¥åŠ›ã®æ¨ªå¹…ã®æœ€å¤§å€¤ ; 出力ã®ç¸¦å¹… while (<>) { chomp ; if ( $o{s} ) { s/\s*$// ; # -s æŒ‡å®šã§æœ«å°¾ã®ç©ºç™½æ–‡å—ã‚’å–り除ã。 if (/^$/) { $. -- ; next ; } ; } my @F = split /$sep/ , $_ , -1 ; #no warnings ; eval { do { @F = map eval "$o{M}", @F } if defined $o{M} } ; # <-- - Taintを検出ã™ã‚‹ãƒ¢ãƒ¼ãƒ‰(-T) ã®æ™‚ã§ã‚‚実行ã§ãるよã†ã«ã—ãŸã¤ã‚‚り。 @{ $mat[ $. - 1 ] } = @F ; $maxind = $#F if $#F > $maxind ; } for my $i ( 0 .. $maxind ) { my @each ; push @each , $mat[ $_ ][ $i ] for 0 .. $#mat ; # æ—©ã„ print join ( "$sep" , map{ m/^$/ ? $emp1 : $_ } map { $_ // $emp0 } @each ) , "\n" ; } $0 =~ s|.*/|| ; my $ocols = $. ; my $orows = $maxind + 1 ; print STDERR CYAN "$ocols x $orows -> $orows x $ocols (rows x columns) matrix transformation ($0).\n" if $o{v} ; ## ãƒ˜ãƒ«ãƒ—ã®æ‰±ã„ sub VERSION_MESSAGE {} sub HELP_MESSAGE { use FindBin qw[ $Script $Bin ] ; sub EnvJ ( ) { $ENV{LANG} =~ m/^ja_JP/ ? 1 : 0 } ; # # ja_JP.UTF-8 sub en( ) { grep ( /^en(g(l(i(sh?)?)?)?)?/i , @ARGV ) ? 1 : 0 } # English ã¨ã„ã†æ–‡å—列を先é ã‹ã‚‰2æ–‡å—以上をå«ã‚€ã‹ sub ja( ) { grep ( /^jp$|^ja(p(a(n?)?)?)?/i , @ARGV ) ? 1 : 0 } # jp ã¾ãŸã¯ japan ã¨ã„ã†æ–‡å—列を先é ã‹ã‚‰2æ–‡å—以上をå«ã‚€ã‹ sub opt( ) { grep (/^opt(i(o(ns?)?)?)?$/i, @ARGV ) ? 1 : 0 } # options ã¨ã„ã†æ–‡å—列を先é ã‹ã‚‰3æ–‡å—以上å«ã‚€ã‹ã‚‰ sub noPOD ( ) { grep (/^no-?p(od?)?\b/i, @ARGV) ? 1 : 0 } # POD を使ã‚ãªã„ã¨è¨€ã†æŒ‡å®šãŒã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ my $jd = "JapaneseManual" ; my $flagE = ! ja && ( en || ! EnvJ ) ; # 英語ã«ã™ã‚‹ã‹ã©ã†ã‹ã®ãƒ•ラグ exec "perldoc $0" if $flagE && ! opt && ! noPOD ; $ARGV[1] //= '' ; open my $FH , '<' , $0 ; while(<$FH>){ s/\Q'=script='\E/$Script/gi ; s/\Q'=bin='\E/$Bin/gi ; if ( s/^=head1\b\s*// .. s/^=cut\b\s*// ) { if ( s/^=begin\s+$jd\b\s*// .. s/^=end\s+$jd\b\s*// xor $flagE ) { print $_ if ! opt || m/^\s+\-/ ; } } #print $_ if /^=head1/ .. /^=cut\b/ and opt ? m/^\s+\-/ : 1 and ( EnvJ && ! en xor s/^=begin $jd\b// .. s/^=end $jd\b// ) ; } close $FH ; exit 0 ; } =encoding utf8 =pod =head1 transpose -- Transforms the input in the matrix transpose way. Program Name : transpose ('=Bin=') The whole input is assumed to be seperated by line ending charcter vertically and each line of the input is assumed to be separated by tab characters. You can specify other characters instead of tab by the specification "-s char". Usage Example : printf -v "1\t2\n3\t4" | $0 # A matrix (1,2;3,4) will be transposed into (1,3;2,4) saikoro -g 3x5 | $0 # Random Matrix will be transposed. Options : -/ str ; respecify the separator instead of a tab character. -s ; removing the redundant space characters. Useful when you copy the SQL output and pasting into this program. -v ; Verbose output such as telling the input and output dimensions. -. ; 入力ã«ãŠã„ã¦ç©ºæ–‡å—列を . ã«å¤‰æ›ã—ã€å‡ºåŠ›ã«å‡¹ã¿ã‚’埋ã‚ãŸã‚»ãƒ«ã«ã¯ = ã§åŸ‹ã‚る。 -S 'cmd' ; cmd ã« Perlã®ã‚³ãƒžãƒ³ãƒ‰ã‚’書ãã“ã¨ã§ã€å„セルã«å¯¾ã™ã‚‹å¤‰æ›ãŒã§ãる。'$_*2' ã‚„ 's/ab/AB/g; $_ ' ãªã©ãŒå¯èƒ½ã€‚ # This program has been made since 2016-02-03(Wed) by Toshiyuki Shimono, as a part of TSV hacking toolset for table data. =begin JapaneseManual プãƒã‚°ãƒ©ãƒ å : '=SCRIPT=' ('=Bin=') 入力TSVファイルを転置ã™ã‚‹ã€‚縦方å‘ã¨æ¨ªæ–¹å‘ãŒã€é€†è»¢ã™ã‚‹ã€‚ 使用例 : printf -v "1\t2\n3\t4" | $0 # 行列(1,2;3,4) ã®è»¢ç½®è¡Œåˆ—を出力ã™ã‚‹ã€‚ saikoro -g 3x5 | $0 # 乱数行列ã®è»¢ç½®è¡Œåˆ—を出力ã™ã‚‹ã€‚ オプション: -/ str : 入力ã¨å‡ºåŠ›ã®ä¸¡æ–¹ã®åŒºåˆ‡ã‚Šæ–‡å—ã‚’ str ã«å¤‰æ›´ã™ã‚‹ã€‚ -s : è¡Œã®æœ«å°¾ã®ç©ºç™½æ–‡å—ã‚’å–り除ã。ãã—ã¦ãã®çµæžœç©ºè¡Œã«ãªã£ãŸå ´åˆã‚‚å–り除ã。入力ã«ä½™è¨ˆãªç©ºç™½æ–‡å—ãŒæœ«å°¾ã«ã¤ãå ´åˆã«ä¾¿åˆ©ã€‚ -v : 何行何列ã®è¡Œåˆ—を出力をã—ãŸã‹ã‚’標準エラー出力ã«å‡ºåŠ›ã™ã‚‹ã€‚(Verbose) -. ; 入力ã«ãŠã„ã¦ç©ºæ–‡å—列を . ã«å¤‰æ›ã—ã€å‡ºåŠ›ã«å‡¹ã¿ã‚’埋ã‚ãŸã‚»ãƒ«ã«ã¯ = ã§åŸ‹ã‚る。 -M 'cmd' ; cmd ã« Perlã®ã‚³ãƒžãƒ³ãƒ‰ã‚’書ãã“ã¨ã§ã€å„セルã«å¯¾ã™ã‚‹å¤‰æ›ãŒã§ãる。'$_*2' ã‚„ 's/ab/AB/g; $_ ' ãªã©ãŒå¯èƒ½ã€‚ 開発メモ : * 空文å—列ã®ã‚»ãƒ«ãŒå…¥åŠ›ã«ãµãれã¦ã„ãŸã‚Šã€åˆ—æ•°ãŒå…¥åŠ›ã§ç•°ãªã£ã¦ã„ãŸã‚Šã€ç©ºè¡ŒãŒå˜åœ¨ã—ãŸå ´åˆã«ã¯è¦å‘Šã‚’表示ã™ã‚‹æ§˜ã«ã—ãŸã„。 # ã“ã®ãƒ–ãƒã‚°ãƒ©ãƒ transpose 㯠2016å¹´2月3æ—¥(æ°´)ã‹ã‚‰è¡¨å½¢å¼ãƒ‡ãƒ¼ã‚¿ã«å¯¾ã™ã‚‹é“具作りã®ä¸€ç’°ã¨ã—ã¦ã€ä¸‹é‡Žå¯¿ä¹‹ãŒä½œæˆã—ãŸã‚‚ã®ã§ã‚る。 # ã“ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã«æœ€å¾Œã«æ‰‹ã‚’入れãŸã®ã¯ã€2018å¹´6月4æ—¥(月)ã§ã‚る。 =end JapaneseManual =cut