Visit Our UNIX and Linux User Community


[bash] redirect (save) array to a file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting [bash] redirect (save) array to a file
# 1  
Old 10-26-2009
[bash] redirect (save) array to a file

Hi,

I'm trying to write a function that redirects the contents of an
array to a file. The array contains the lines of a data file with
white space.

The function seems to preserve all white space when redirected
except that it seems to ignore newlines. As a consequence, the
elements of the array are appended one after the other.



use: array_save ARRAY $filename
Code:
function array_save
{
	eval "( echo \"\${$1[@]}\" > $2 )"
}

NOTES:
Adding local IFS=$'\n' to the beginning of the function doesn't
seem to make any difference. I also tried printf in place of
echo but was not fully tested.

Suggestions and solutions would be appreciated.

A.
# 2  
Old 10-27-2009
You could try with echo -e to have the newline recognized. Though it would be ok to see how you assign/fill this array. Anyway here is a general example:

Code:
$> array=( a b "c\n" d e )
$> echo -e ${array[@]}
a b c
 d e
$> echo -e ${array[0]}
a
$> echo -e ${array[1]}
b
$> echo -e ${array[2]}
c

$> echo -e ${array[3]}
d
$> echo -e ${array[4]}
e

# 3  
Old 10-27-2009
Thanks for reply.

It's a solution that's a combination of several posts from
the forum, the majority of which was suggested by a forum
member to another problem I had with arrays and I've used
the same general format and extended it to other functions.

After experimenting with other methods, it was the only
one that worked and the most elegant. After the array is
loaded, I have no further problems using or manipulating it.

use: array_load ARRAY $PATHTOFILE
Code:
function array_load
{
	local IFS=$'\n'
	eval "$1=( \$( < \"$2\" ) )"
}

# 4  
Old 10-28-2009
Is your problem solved?
# 5  
Old 10-28-2009
Hi.

No.

The 'array_load' function populates the array with each
element within quotes. The 'array_save' function above,
outputs each element serially on one line.

However, I did manage a solution that works:

use: save_array ARRAY $filename
Code:
function array_assign
{
	eval "$1=( \"\${$2[@]}\" )"
}

function array_save
{
	local -a ARRAY;	array_assign ARRAY $1
	local	 FILE;	FILE=$2

	for ELEMENT in "${ARRAY[@]}"; do
		echo $ELEMENT
		done > $FILE
}

But it's not as elegant as the other functions. As the
function is part of a library that forms the foundation
of re-useable code concept, ideally it would have
been independent and used no named variables.
# 6  
Old 10-28-2009

Code:
array_save()
{
  eval "printf '%s\n' \"\${${x}[@]}\""
} > "${2:-/dev/tty}"

This User Gave Thanks to cfajohnson For This Post:
# 7  
Old 10-29-2009
Thank you again Chris.

After weeks of searching the net and examining tens of
solutions, I do believe that the entire approach to arrays
in bash has been redefined due to your expertise and opened
up new possibilities for myself and other users. Dare I say
that it's even worthy of a third book!

I nearly had the solution myself, but used double quotes
around "string newline" instead of single quotes, should have
known better. Thanks also goes to nDuff at #bash for his/her
suggestions for using printf.

A.

Previous Thread | Next Thread
Test Your Knowledge in Computers #351
Difficulty: Medium
Unix was hatched in an unnamed PDP-7 operating system in 1969.
True or False?

9 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Unset array element and save to file in Bash

#!/bin/bash X=(2H 4S 10D QC JD 9H 8S) How do I unset the 10D from this array and save it to a file? Please use CODE tags as required by forum rules! (5 Replies)
Discussion started by: cogiz
5 Replies

2. Shell Programming and Scripting

Bash to select and save file in new directory

I am trying to select a file in bash and save it to a directory. The below does run but no selected file is saved. Thank you :). bash # select file printf "please select a file to analyze with entered gene or genes \n" select file in $(cd... (4 Replies)
Discussion started by: cmccabe
4 Replies

3. Shell Programming and Scripting

Bash script - add/edit to file and save - sed?

I'm working on a script to execute a number of items. One being, editing particular files to add certain lines. I'm attempting to utilize sed, but, having issues when running from a bash script. Assistance is greatly appreciated. My example: sed -i '14 i\ # add these lines add these lines to... (5 Replies)
Discussion started by: Nvizn
5 Replies

4. Homework & Coursework Questions

Save output into file bash scripting

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: Hi there. i have created a program that in the end it will give output like this 1 2 3 4 5 10 9 ... (1 Reply)
Discussion started by: shdin271
1 Replies

5. Shell Programming and Scripting

Save output into file bash scripting

Hi there. i have created a program that in the end it will give output like this 1 2 3 4 5 10 9 8 7 6 11 12 13 14 15 .............. 17 i wonder how to save the output into a single string and into a file. i.e 1 10 11 12 9 2 3 8 13 14 7 4 5 6 15 17 (in this order,... (3 Replies)
Discussion started by: shdin271
3 Replies

6. UNIX for Dummies Questions & Answers

Passing values from file into array in Bash

Hi, I'm trying to write a bash script that takes a file and passes each line from the file into an array with elements separated by column. For example: Sample file "file1.txt": 1 name1 a first 2 name2 b second 3 name3 c third and have arrays such as: line1 = ( "1" "name1" "a"... (3 Replies)
Discussion started by: ShiGua
3 Replies

7. Shell Programming and Scripting

redirect time command output to file (cygwin bash)

I have set up a bash script to run a long list of things that I need to time. I would like to redirect the output of time to a file. I have set it up like, echo "Runtimes for servlet 4, 100K structures" > test_times.txt echo "" >> test_times.txt echo "runs where N=10" >> test_times.txt echo... (7 Replies)
Discussion started by: LMHmedchem
7 Replies

8. Shell Programming and Scripting

Run a bash script, display on the screen and save all information in a file including error info

Hi all, How to: Run a bash script, display on the screen and save all information in a file including error information. For example: I have a bash script called test.sh now I want to run the test.sh and display the output on the screen and save the output including error info to a file. ... (1 Reply)
Discussion started by: Damon sine
1 Replies

9. Shell Programming and Scripting

perl-data from file save to multidimensional array

i have a file,like 1 3 4 5 6 7 8 9 i want to save it into an array. and then i want to get every element, because i want to use them to calculate. for example: i want to calculate 1 + 3. but i cannot reach my goal. open (FILE, "<", "number"); my @arr; while (<FILE>){ chomp;... (1 Reply)
Discussion started by: pp-zz
1 Replies

Featured Tech Videos