10-27-2008
Split and print
I have a file with data such as:
X Y Z 4 1,3,5,7, 4,6,8,10,
A B C 3 2,3,4, 5,9,11,
E F G 5 1,2,3,4,5, 8,9,10,11,12,
Columns 1, 2 and 3 are descriptions. Column 4 tells how many numbers are in columns 5 and 6
What I'd like to do is split column 5 and column 6 by the "," and then print out a line with columns 1, 2, 3, 4, and the 1st number from column 5 and column 6, then print out a line with columns 1, 2, 3, 4,and the 2nd number in cols 5 and 6 ... until all the numbers in 5 and 6 are printed.
X Y Z 4 1 4
X Y Z 4 3 6
X Y Z 4 5 8
X Y Z 4 7 10
A B C 3 2 5
A B C 3 3 9
A B C 3 4 11
E F G 5 1 8
E F G 5 2 9
E F G 5 3 10
E F G 5 4 11
E F G 5 5 12
I was trying something like:
awk '{
split($5,a,",");
split($6,b",");
for (i=1; i<= $4; i++)
print $1,$2,$3, a[i], b[i]
}’
infile > outfile &
This isn't working
Thank you so much.
edit:
%$#%# I just messed up the syntax it works if I can use the commas correctly
split($5,a, ",");
split($6,b, ",");
Sorry
10 More Discussions You Might Find Interesting
1. Shell Programming and Scripting
Hello simple question :
how can i split the $PATH by the ":" seperator with one liner ?
mybe using awk is there any builtin function in awk that splits and prints the output ?
thanks (2 Replies)
Discussion started by: umen
2 Replies
2. HP-UX
Hi,
Could any one please let me know what is the option
available in UNIX to print by specifying the paper size?
We are using Unix11i. I could n't see any option specified in the 'lp' command to print the report by specifying the size of the paper. It would be of great help to me, if... (1 Reply)
Discussion started by: ukarthik
1 Replies
3. UNIX for Dummies Questions & Answers
I have gone through all the threads in the forum and tested out different things. I am trying to split a 3GB file into multiple files. Some files are even larger than this.
For example:
split -l 3000000 filename.txt
This is very slow and it splits the file with 3 million records in each... (10 Replies)
Discussion started by: madhunk
10 Replies
4. AIX
I need help to split a filename 'a0crk_user:A0-B0123$#%test' into a0crk_user and A0-B0123 and print the output under 2 different columns namely
User and Status.
for eg. the output should like below:
User Status
---- ------
a0crk_user A0-B0123 (3 Replies)
Discussion started by: mbak
3 Replies
5. Shell Programming and Scripting
abc.dat
tty cpu
tin tout us sy wt id
0 0 7 3 19 71
extended device statistics
r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device
0.0 133.2 0.0 682.9 0.0 1.0 0.0 7.2 0 79 c1t0d0
0.2 180.4 0.1 5471.2 3.0 2.8 16.4 15.6 15 52 aaaaaa1-xx
I want to skip first 5 line... (4 Replies)
Discussion started by: kchinnam
4 Replies
6. Shell Programming and Scripting
Hello;
I have a file consists of 4 columns separated by tab. The problem is the third fields. Some of the them are very long but can be split by the vertical bar "|". Also some of them do not contain the string "UniProt", but I could ignore it at this moment, and sort the file afterwards. Here is... (5 Replies)
Discussion started by: yifangt
5 Replies
7. UNIX for Dummies Questions & Answers
Currently, I have a print filter that takes a text file, that convert it into PCL which then gets to a HP printer. This works.
Now I need to embedded a image file within the text file.
I'm able to convert the image file into PCL and I can cat both files together to into a single document... (1 Reply)
Discussion started by: chedlee88-1
1 Replies
8. Solaris
Guys, I have a issue that I am trying to rectify please advise.
lpstat -t shows
scheduler is running
printer lext644 disabled since Mon Dec 02 19:48:18 2013. available.I have restarted the printer service and it shows online but the above says disabled. I have a lot of jobs in the print... (1 Reply)
Discussion started by: terrywhitejr
1 Replies
9. Shell Programming and Scripting
How to print the split array elements in the same line with awk?
echo "1 2 3 4 /path/to/file1" | awk 'split($5, A, "/") {print $0; for (i=1; i<=length(A); i++) print A}'
echo "2 2 3 6 /longer/path/to/another/file2" | awk 'split($5, A, "/") {print $0; for (i=1; i<=length(A); i++) print A}'
What... (6 Replies)
Discussion started by: yifangt
6 Replies
10. UNIX for Beginners Questions & Answers
Hello,
I need to split a file by number of records and rename each split file with actual filename pre-pended with 3 digit split number.
What I have tried is the below command with 2 digit numeric value
split -l 3 -d abc.txt F (# Will Produce split Files as F00 F01 F02)
How to produce... (19 Replies)
Discussion started by: techedipro
19 Replies
LEARN ABOUT DEBIAN
rtbl_add_column_by_id
RTBL(3) BSD Library Functions Manual RTBL(3)
NAME
rtbl_create, rtbl_destroy, rtbl_set_flags, rtbl_get_flags, rtbl_set_prefix, rtbl_set_separator, rtbl_set_column_prefix,
rtbl_set_column_affix_by_id, rtbl_add_column, rtbl_add_column_by_id, rtbl_add_column_entry, rtbl_add_column_entry_by_id, rtbl_new_row,
rtbl_format -- format data in simple tables
LIBRARY
The roken library (libroken, -lroken)
SYNOPSIS
#include <rtbl.h>
int
rtbl_add_column(rtbl_t table, const char *column_name, unsigned int flags);
int
rtbl_add_column_by_id(rtbl_t table, unsigned int column_id, const char *column_header, unsigned int flags);
int
rtbl_add_column_entry(rtbl_t table, const char *column_name, const char *cell_entry);
int
rtbl_add_column_entry_by_id(rtbl_t table, unsigned int column_id, const char *cell_entry);
rtbl_t
rtbl_create(void);
void
rtbl_destroy(rtbl_t table);
int
rtbl_new_row(rtbl_t table);
int
rtbl_set_column_affix_by_id(rtbl_t table, unsigned int column_id, const, char, *prefix", const char *suffix);
int
rtbl_set_column_prefix(rtbl_t table, const char *column_name, const char *prefix);
unsigned int
rtbl_get_flags(rtbl_t table);
void
rtbl_set_flags(rtbl_t table, unsigned int flags);
int
rtbl_set_prefix(rtbl_t table, const char *prefix);
int
rtbl_set_separator(rtbl_t table, const char *separator);
int
rtbl_format(rtbl_t table, FILE, *file");
DESCRIPTION
This set of functions assemble a simple table consisting of rows and columns, allowing it to be printed with certain options. Typical use
would be output from tools such as ls(1) or netstat(1), where you have a fixed number of columns, but don't know the column widths before
hand.
A table is created with rtbl_create() and destroyed with rtbl_destroy().
Global flags on the table are set with rtbl_set_flags and retrieved with rtbl_get_flags. At present the only defined flag is
RTBL_HEADER_STYLE_NONE which suppresses printing the header.
Before adding data to the table, one or more columns need to be created. This would normally be done with rtbl_add_column_by_id(), column_id
is any number of your choice (it's used only to identify columns), column_header is the header to print at the top of the column, and flags
are flags specific to this column. Currently the only defined flag is RTBL_ALIGN_RIGHT, aligning column entries to the right. Columns are
printed in the order they are added.
There's also a way to add columns by column name with rtbl_add_column(), but this is less flexible (you need unique header names), and is
considered deprecated.
To add data to a column you use rtbl_add_column_entry_by_id(), where the column_id is the same as when the column was added (adding data to a
non-existent column is undefined), and cell_entry is whatever string you wish to include in that cell. It should not include newlines. For
columns added with rtbl_add_column() you must use rtbl_add_column_entry() instead.
rtbl_new_row() fills all columns with blank entries until they all have the same number of rows.
Each column can have a separate prefix and suffix, set with rtbl_set_column_affix_by_id; rtbl_set_column_prefix allows setting the prefix
only by column name. In addition to this, columns may be separated by a string set with rtbl_set_separator (by default columns are not
seprated by anything).
The finished table is printed to file with rtbl_format.
EXAMPLES
This program:
#include <stdio.h>
#include <rtbl.h>
int
main(int argc, char **argv)
{
rtbl_t table;
table = rtbl_create();
rtbl_set_separator(table, " ");
rtbl_add_column_by_id(table, 0, "Column A", 0);
rtbl_add_column_by_id(table, 1, "Column B", RTBL_ALIGN_RIGHT);
rtbl_add_column_by_id(table, 2, "Column C", 0);
rtbl_add_column_entry_by_id(table, 0, "A-1");
rtbl_add_column_entry_by_id(table, 0, "A-2");
rtbl_add_column_entry_by_id(table, 0, "A-3");
rtbl_add_column_entry_by_id(table, 1, "B-1");
rtbl_add_column_entry_by_id(table, 2, "C-1");
rtbl_add_column_entry_by_id(table, 2, "C-2");
rtbl_add_column_entry_by_id(table, 1, "B-2");
rtbl_add_column_entry_by_id(table, 1, "B-3");
rtbl_add_column_entry_by_id(table, 2, "C-3");
rtbl_add_column_entry_by_id(table, 0, "A-4");
rtbl_new_row(table);
rtbl_add_column_entry_by_id(table, 1, "B-4");
rtbl_new_row(table);
rtbl_add_column_entry_by_id(table, 2, "C-4");
rtbl_new_row(table);
rtbl_format(table, stdout);
rtbl_destroy(table);
return 0;
}
will output the following:
Column A Column B Column C
A-1 B-1 C-1
A-2 B-2 C-2
A-3 B-3 C-3
A-4
B-4
C-4
HEIMDAL
June 26, 2004 HEIMDAL