Transpose columns to Rows : Big data


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Transpose columns to Rows : Big data
# 15  
Old 08-13-2010
Code:
awk 'NR==1{for(i=1;i<=NF;i++)col[i]=i}{for(i=1;i<=NF;i++){ printf "%s%s",$i,FS > col[i]".txt" } }' myfile
paste -s ?.txt

# 16  
Old 08-13-2010
Quote:
Originally Posted by kurumi
Code:
awk 'NR==1{for(i=1;i<=NF;i++)col[i]=i}{for(i=1;i<=NF;i++){ printf "%s%s",$i,FS > col[i]".txt" } }' myfile
paste -s ?.txt

Hi, kurumi:

This is a good approach for avoiding my code's memory appetite and for also avoiding your original approach's appetite for fork-exec. However, there a few fatal bugs that will not yield a correct matrix transposition.

* '?.txt' would not match properly since the '?' only matches a single character but the headers shown -- from which the file names are taken -- are all multicharacter; '*.txt' is necessary.

* The shell globbing used to build the paste command line may not (will not with the data given in the original post) yield the header names in the same order as they appear in the file. The file names need to be named in a way that preserves the order.

* The use of paste -s on multiple files without a terminating newline produces a one line file, when what's wanted is one line per file. cat would be correct if not for the absence of a newline at the end of each file.

* The command line generated by all those file names may possibly exceed the system's command line length limit.

* The AWK process will require many file descriptors (600,003 or so .... one per output file in addition to stdin, stdout, and stderr). Depending on how the system is configured, this may exceed the login account's imposed descriptor limits. If that's the case, then the limits need to be bumped up or AWK needs to close each descriptor after writing to it.

Regards,
Alister

P.S. Please don't delete proposed solutions that have been discussed in a thread. Disappearing posts cause confusion and are an obstacle to continued dialogue and learning.

---------- Post updated at 05:55 PM ---------- Previous update was at 05:53 PM ----------

Hi genehunter:

The following code is a reworking of Kurumi's approach which fixes the bugs I mentioned above and makes conservative assumptions regarding ARG_MAX and file descriptor limits. To invoke it, save the code to a file, make it executable, and invoke it with one argument, the name of the data file:
Code:
#!/bin/sh

infile="$1"

awk '
    BEGIN {
        getline
        l=length(NF)
        for (i=1; i<=NF; i++) {
            f[i]=sprintf("%"l"s", i) ".col"
            gsub(" ", "0", f[i])
            printf("%s", $i) > f[i]
            close(f[i])
        }
    }

    {
        for (i=1; i<=NF; i++) {
            printf("%s%s", FS, $i) >> f[i]
            close(f[i])
        }
    }

    END {
        for (i in f) {
            printf("\n") >> f[i]
            close(f[i])
        }
    }' "$infile"

for f in *.col; do
    echo "$f"
done | xargs cat > outfile

If the file descriptor limit were sufficiently large, then all the close() calls could be deleted. And if ARG_MAX were sufficiently large, a simple "cat * > outfile" would suffice.

Regards,
Alister
This User Gave Thanks to alister For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Transpose rows to certain columns

Hello, I have the following data and I want to use awk to transpose each value to a certain column , so in case the value is not available the column should be empty. Example: Box Name: BoxA Weight: 1 Length :2 Depth :3 Color: red Box Name: BoxB Weight: 3 Length :4 Color: Yellow... (5 Replies)
Discussion started by: rahman.ahmed
5 Replies

2. Shell Programming and Scripting

Transpose comma delimited data in rows to columns

Hello, I have a bilingual database with the following structure a,b,c=d,e,f The right half is in a Left to right script and the second is in a Right to left script as the examples below show What I need is to separate out the database such that the first word on the left hand matches the first... (4 Replies)
Discussion started by: gimley
4 Replies

3. Shell Programming and Scripting

Transpose rows to columns complex

Input: IN,A,1 IN,B,3 IN,B,2 IN,C,7 BR,A,1 BR,A,5 BR,C,9 AR,C,9 Output: CNTRY,A,B,C IN,1,5,7 BR,6,0,9 AR,0,0,9 (7 Replies)
Discussion started by: unme
7 Replies

4. Shell Programming and Scripting

awk to transpose every 7 rows into columns

input: a1 a2 a3 a4 a5 a6 a7 b1 b2 b3 .. b7 .. z1 .. z7 (12 Replies)
Discussion started by: ux4me
12 Replies

5. Shell Programming and Scripting

Columns to Rows - Transpose - Special Condition

Hi Friends, Hope all is well. I have an input file like this a gene1 10 b gene1 2 c gene2 20 c gene3 10 d gene4 5 e gene5 6 Steps to reach output. 1. Print unique values of column1 as column of the matrix, which will be a b c (5 Replies)
Discussion started by: jacobs.smith
5 Replies

6. Shell Programming and Scripting

Transpose Data from Columns to rows

Hello. very new to shell scripting and would like to know if anyone could help me. I have data thats being pulled into a txt file and currently have to manually transpose the data which is taking a long time to do. here is what the data looks like. Server1 -- Date -- Other -- value... (7 Replies)
Discussion started by: Mikes88
7 Replies

7. Shell Programming and Scripting

transpose rows to columns

Any tips on how I can awk the input data to display the desired output per below? Thanking you in advance. input test data: 2 2010-02-16 10:00:00 111111111111 bytes 99999999999 bytes 90% 4 2010-02-16 12:00:00 333333333333 bytes 77777777777 bytes 88% 5 2010-02-16 11:00:00... (4 Replies)
Discussion started by: ux4me
4 Replies

8. Shell Programming and Scripting

Transpose columns to Rows

I have a data A 1 B 2 C 3 D 4 E 5 i would like to change the data A B C D E 1 2 3 4 5 Pls suggest how we can do it in UNIX. Start using code tags, thanks. Also start reading your PM's you get from Mods as well read the Forum Rules. That might not do any harm. (24 Replies)
Discussion started by: aravindj80
24 Replies

9. Shell Programming and Scripting

Transpose Rows Into Columns

I'm aware there are a lot of resources dedicated to the question of transposing rows and columns, but I'm a total newbie at this and the task appears to be beyond me. I have 40 text files with content that looks like this: Dokument 1 von 146 Orange County Register (California) June 26, 2010... (2 Replies)
Discussion started by: spindoctor
2 Replies

10. Shell Programming and Scripting

Rows to Columns - File Transpose

Hi I have an input file and I want to transpose it but I need to take care that if any field is missing for a record it should be popoulated with space for that field - using a shell script INFILE ---------- emp=1 sal=2 loc=abc emp=2 sal=21 sal=22 loc=xyz emp=5 loc=abc OUTFILE... (10 Replies)
Discussion started by: 46019
10 Replies
Login or Register to Ask a Question