splitting tab-delimited file with awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting splitting tab-delimited file with awk
# 1  
Old 03-10-2009
splitting tab-delimited file with awk

Hi all, I need help to split a tab-delimited list into separate files by the filename-field. The list is already sorted ascendingly by filename, an example list would look like this;

filename001 word1 word2
filename001 word3 word4
filename002 word1 word2
filename002 word3 word4
filename002 word5 word6

I have tried this using a slightly modified bash script which I found here on unix.com :

awk -F"\t" 'OFS="\t"{print >> ($1 ".tab")}' tabdelimitedfile.tab

This outputs the files filename001.tab and filename002.tab

Unfortuneatly this will not work on larger files than the example listed above if too many different file names are found. I get the error message "awk: *.tab makes too many open files" on exit.

I would be grateful if anyone could suggest an alternative way which outputs one file at a time every time a new filename is encountered.

Cheers

Per
# 2  
Old 03-10-2009
Code:
tab="         "        # press the tab key add a quote at the end

OLD_IFS="$IFS"
rm -f filename 0*  # remove past runs of output files
while IFS="$tab" && read f1 f2 f3
do      
      echo "$f1$tab$f2$tab$f2" >> "$f1"
done < inputfile
IFS="$OLD_IFS"

This may not perform all that well with the number of file open and dup calls when you have a huge input file

Last edited by jim mcnamara; 03-10-2009 at 05:32 PM..
# 3  
Old 03-10-2009
Maybe this is what you are looking for:
Code:
while read newfile text;do echo "$text" >> ${newfile}.tab;done < file

# 4  
Old 03-10-2009
With awk:

(use nawk or /usr/xpg4/bin/awk on Solaris):
Code:
awk -F'\t' '!_[$1]++ { 
  fn && close(fn)
  fn = $1 ".tab"
  }
{ print > fn }
' tabdelimitedfile.tab


Last edited by radoulov; 03-10-2009 at 06:23 PM.. Reason: OFS is not needed
# 5  
Old 03-11-2009
Thanks, that last solution by radoulov was exactly what I was looking for. Thank you very much for your solutions!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Replace a column in tab delimited file with column in other tab delimited file,based on match

Hello Everyone.. I want to replace the retail col from FileI with cstp1 col from FileP if the strpno matches in both files FileP.txt ... (2 Replies)
Discussion started by: YogeshG
2 Replies

2. UNIX for Beginners Questions & Answers

awk to parse current and next row in tab-delimited file

Hi there, I would like to use awk to reformat a tab-delimited file containing three columns as follows: Data file: sample 1 173 sample 269 530 sample 687 733 sample 1699 1779 Desired output file: sample 174..265, 531..686, 734..1698 I need the value... (5 Replies)
Discussion started by: emiley
5 Replies

3. UNIX for Dummies Questions & Answers

Need to convert a pipe delimited text file to tab delimited

Hi, I have a rquirement in unix as below . I have a text file with me seperated by | symbol and i need to generate a excel file through unix commands/script so that each value will go to each column. ex: Input Text file: 1|A|apple 2|B|bottle excel file to be generated as output as... (9 Replies)
Discussion started by: raja kakitapall
9 Replies

4. Shell Programming and Scripting

How to make tab delimited file to space delimited?

Hi How to make tab delimited file to space delimited? in put file: ABC kgy jkh ghj ash kjl o/p file: ABC kgy jkh ghj ash kjl Use code tags, thanks. (1 Reply)
Discussion started by: jagdishrout
1 Replies

5. Shell Programming and Scripting

splitting tab delimited strings

hi i have a requirement to input a string to a shell script and to split the string to multiple fields, the string is copied from a row of three columns (name,age,address) in an excel sheet. the three columns (from excel) are seperated with a tab when pasted in the command prompt, but when the ... (2 Replies)
Discussion started by: midhun19
2 Replies

6. Shell Programming and Scripting

Help with converting Pipe delimited file to Tab Delimited

I have a file which was pipe delimited, I need to make it tab delimited. I tried with sed but no use cat file | sed 's/|//t/g' The above command substituted "/t" not tab in the place of pipe. Sample file: abc|123|2012-01-30|2012-04-28|xyz have to convert to: abc 123... (6 Replies)
Discussion started by: karumudi7
6 Replies

7. UNIX for Dummies Questions & Answers

tab delimited file that is not tab delimited.

Hi Forum I have a tab delimited file that opens well in Openoffice calc (excel). But when I perform any operation in command line, it reads the file incorrectly. When I 'save As' the same file in office as tab delimited then it works fine. The file that I think is tab delimited is actually... (8 Replies)
Discussion started by: imlearning
8 Replies

8. UNIX for Dummies Questions & Answers

Using awk to log transform a column in a tab-delimited text file?

How do I use awk to log transform the fifth column of a tab-delimited text file? Thanks! (1 Reply)
Discussion started by: evelibertine
1 Replies

9. UNIX for Dummies Questions & Answers

Trim String in 3rd Column in Tab Delimited File...SED/PERL/AWK?

Hey Everybody, I am having much trouble figuring this out, as I am not really a programmer..:mad: Datafile.txt Column0 Column1 Column2 ABC DEF xxxGHI I am running using WGET on a cronjob to grab a datafile, but I need to cut the first three characters from... (6 Replies)
Discussion started by: rickdini
6 Replies

10. Shell Programming and Scripting

Converting Tab delimited file to Comma delimited file in Unix

Hi, Can anyone let me know on how to convert a Tab delimited file to Comma delimited file in Unix Thanks!! (22 Replies)
Discussion started by: charan81
22 Replies
Login or Register to Ask a Question