행열 바꾸기...

doodoo의 이미지

어쩌다가 이러한 경우가 생겼습니다.
아래와 같이

1 2 3
4 5 6
7 8 9

행열이 있을때
1 4 7
2 5 8
3 6 9

이렇게 바꾸는 쉘을 짤수 있을까요? 아니면 awk, 혹은 sed 등으로 짤수 있을까요?

액셀에서는 되는데...쉘에서는 방법이 떠오르지 않네요...
PS 실제로는 행열 길이가 매우 길고, 가변이라서 편집기로는 엄두가 나지 않네요...

ymir의 이미지

$ cat run.sh
#!/bin/bash
 
infile=$1
 
declare -a array
 
array=(`cat $infile`)
ncol=`head -1 $infile | wc -w`
nrow=`wc -l $infile | cut -f1 -d' '`
 
for ((i=0; i<ncol; i++))
do
	for ((j=0; j<nrow; j++))
	do
		echo -n ${array[j*ncol+i]}
		echo -n " "  # field separator
	done
	echo "" # new line
done
 
exit 0;
 
$ cat in.txt
a b c d e ff
gg h i j k l
1 2 3 4 5 6
 
$ sh run.sh in.txt
a gg 1 
b h 2 
c i 3 
d j 4 
e k 5 
ff l 6 

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

doodoo의 이미지

헉!
배쉬도 어레이가 되는군요?

declare 문은 좀더 찿아 봐야 겠군요...

감사합니다...C처럼 짜는건 생각 못해봤군요...

lacovnk의 이미지

transpose 로 검색하면 나오네요 :)

rgbi3307의 이미지

#include <stdio.h>
main ()
{
        int arr[3][3] = {
                {1, 2, 3},
                {4, 5, 6},
                {7, 8, 9}
        };
        int *pa;
        int i, j, k;
 
        printf ("\nBefore...\n");
        pa = (int*)arr;
        for (i = 0; i < 9; i++) {
                printf ("%d, ", *pa++);
                if (!((i+1) % 3)) printf ("\n");
        }
 
        printf ("\nAfter...\n");
        pa = (int*)arr;
        k = 0;
        for (i = 0; i < 9; i++) {
                j = i * 3 - k;
                printf ("%d, ", *(pa+j));
                if (!((i+1) % 3)) {
                        printf ("\n");
                        k += 8;
                }
        }
}

실행결과

Before...
1, 2, 3,
4, 5, 6,
7, 8, 9,

After...
1, 4, 7,
2, 5, 8,
3, 6, 9,

From:
*알지비 (메일: rgbi3307(at)nate.com)
*학창시절 마이크로마우스를 만들었고, 10년동안 IT관련 개발자로 일하고 있음.
*틈틈히 커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))

From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))

neocoin의 이미지

ruby 기본 라이브러리 중 matrix 로도..

input.txt

 1 2 3                                                                       
 4 5 6 
 7 8 9

m.rb

#!/usr/bin/env ruby
 require 'matrix'
 
 m = Matrix.rows($<.map{|i|i.split})                                         
 m.transpose.to_a.each{|i| puts i.join(" ")}

usage

(0:8:127)$ ./m.rb < input.txt
1 4 7
2 5 8
3 6 9

다른 라이브러리들이 더 빠르고 좋은거 많을 겁니다. ;;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.