Sponsored Content
Top Forums Shell Programming and Scripting Row bind multiple csv files having different column headers Post 302985163 by Don Cragun on Monday 7th of November 2016 03:50:25 AM
Old 11-07-2016
The following script seems to do what you want:
Code:
#!/bin/ksh
IAm=${0##*/}
if [ $# -lt 2 ]
then	printf 'Usage: %s file1 ... fileN\n' "$IAm" >&2
	exit 1
fi
awk '
BEGIN {	FS = OFS = ","
	# Gather field names from the 1st line of each input file...
	for(i = 1; i < ARGC; i++) {
		if((getline < ARGV[i]) != 1) {
			printf("*** Cannott read header from file \"%s\".\n",
			    ARGV[i])
			continue;
		}
		close(ARGV[i])
		for(j = 1; j <= NF; j++)
			if($j in H)
				continue;
			else {	H[$j] = ++Hc
				OH[Hc] = $j
				# Add to output file header.
				printf("%s%s", HOFS, $j)
				HOFS = OFS
			}
	}
	print ""
}
FNR == 1 {
	# Clear output order list and headers from from previous file.
	for(i in O)
		delete O[i]
	for(i in FH)
		delete FH[i]
	# Determine order in which input fields should be output for this file...
	for(i = 1; i <= NF; i++)
		FH[$i] = i
	for(i = 1; i <= Hc; i++)
		O[i] = (OH[i] in FH) ? FH[OH[i]] : NF + 1
	next
}
{	# Print the data lines for the current input file.
	for(i = 1; i <= Hc; i++)
		printf("%s%s", $O[i], (i == Hc) ? ORS : OFS)
}' "$@"

This was written and tested using a Korn shell, but should work with any shell that process POSIX standard shell variable expansions.

If you want to try this on a Solaris/SunOS system, change awk to /usr/xpg4/bin/awk. (I don't remember whether or not nawk on Solaris systems includes support for the awk ARGV[] array that is required for this script to work correctly.)
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Option in sql script to include column headers when spooling file to .csv format

Can anyone help me how to include COLUMN HEADER when spooling file to .CSV format through SQL statement. Thanks, Akbar (4 Replies)
Discussion started by: s1a2m3
4 Replies

2. Shell Programming and Scripting

Combine Multiple text or csv files column-wise

Hi All I am trying to combine columns from multiple text files into a single file using paste command but the record length being unequal in the different files the data is running over to the closest empty cell on the left. Please see below. What can i do to resolve this ? File 1 File... (15 Replies)
Discussion started by: venky_ibm
15 Replies

3. Shell Programming and Scripting

Help converting column to row for multiple files

Hi all, I am pretty new at this so be gentle. Also, if there is any chance you could explain what the code you use is actually doing, that would really help me out, Im learning after all :) So I am trying to convert a selected column of numbers from input file1 into a row in output file2 ... (3 Replies)
Discussion started by: StudentServitor
3 Replies

4. Shell Programming and Scripting

Combining multiple column files into one with file name as first row

Hello All, I have several column files like this $cat a_b_s1.xls 1wert 2tg 3asd 4asdf 5asdf $cat c_d_s2.xls 1wert 2tg 3asd 4asdf 5asdf desired put put $cat combined.txt s1 s2 (2 Replies)
Discussion started by: avatar_007
2 Replies

5. Shell Programming and Scripting

Sar -u generates multiple column headers in csv file

Hi All, The below sar -u command generates multiple column headers in csv file Expected output should print column headers only once in the csv file shell script: $cat sar_cpu_EBS.sh #!/bin/bash while ; do sar -u 15 1 | awk '/^/ {print $1,$2,$4,$6,$7}' | tr -s ' ' ',' >>... (6 Replies)
Discussion started by: a1_win
6 Replies

6. Shell Programming and Scripting

Insterting column in csv from multiple files

Hello, I have a spec file that contains a lot of strings that looks like this: PC DELL OptiPlex 3010MT i3 3220/2GB/500GB/DVD-RW/FREE DOS / 5Y NBD Intel i3 3220 (Dual Core, 3.30GHz, 3MB, w/ HD2500 Graphics), 2GB (1x2GB) DDR3 PC3-1600MHz, 500GB HDD SATA III 7200rpm, DVD+/-RW (16x),... (9 Replies)
Discussion started by: g9100
9 Replies

7. Shell Programming and Scripting

How to row bind two text files?

Hi, I have two text files with approximately 6000 rows each. I wish the bind these two files into a single column in a new text file like this: File 1: EQTN AFAF SPACA8 equatorin ... File 2: DA3 DA5 FAM38B2 HsT748 ... (2 Replies)
Discussion started by: bronzyroo
2 Replies

8. UNIX for Beginners Questions & Answers

Keep only the closet match of timestamped row (include headers) from file1 to precede file2 row/s

This is a question that is related to one I had last August when I was trying to sort/merge two files by millsecond time column (in this case column 6). The script (below) that helped me last august by RudiC solved the puzzle of sorting/merging two files by time, except it gets lost when the... (0 Replies)
Discussion started by: aachave1
0 Replies

9. UNIX for Beginners Questions & Answers

Select and copy .csv files based on row and column number

Dear UNIX experts, I'm a command line novice working on a Macintosh computer (Bash shell) and have neither found advice that is pertinent to my problem on the internet nor in this forum. I have hundreds of .csv files in a directory. Now I would like to copy the subset of files that contains... (8 Replies)
Discussion started by: rcsapo
8 Replies

10. UNIX for Beginners Questions & Answers

How do I extract specific column in multiple csv files?

file1: Name,Threshold,Curr Samples,Curr Error%,Curr ART GETHome,100,21601,0.00%,47 GETregistry,100,21592,0.00%,13 GEThomeLayout,100,30466,0.00%,17 file2: Name,Threshold,Curr Samples,Curr Error%,Curr ART GETHome,100,21601,0.00%,33 GETregistry,100,21592,0.00%,22... (6 Replies)
Discussion started by: Raghuram717
6 Replies
obd2csv(1)						      General Commands Manual							obd2csv(1)

NAME
obd2csv - Convert obdgpslogger(1) logs to csv files SYNOPSIS
obd2csv [ options ] DESCRIPTION
Convert obdgpslogger(1) logs to csv files OPTIONS
-o|--out <output filename> Output to this .csv file -d|--db <database> Work from logs stored in this database file -s|--start <time> Only dump rows more recent than this -e|--end <time> Only dump rows older than this -z|--gzip gzip compress output using zlib [if available] -v|--version Print out version number and exit. -h|--help Print out help and exit. NOT OPTIONS
These options aren't intended for end-users, they're for the GUI. -p|--progress Print out progress. It will occasionally print a number in the range [0..100], indicating progress percentage. SEE ALSO
obdgpslogger(1), obd2kml(1), obd2gpx(1), obdsim(1), obdgui(1), obdlogrepair(1) AUTHORS
Gary "Chunky Ks" Briggs <chunky@icculus.org> obd2csv(1)
All times are GMT -4. The time now is 06:49 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy