Visit Our UNIX and Linux User Community


Combining lists


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Combining lists
# 1  
Old 01-16-2020
Combining lists

Hello everybody.
My operating system is Fedora30, shell - bash
I faced combining lists. I will be glad for help regarding strings, arrays and so on.
The bottom line is as follows. It is necessary to combine each element from the first list with elements from the second.
if the second is longer than the first then need to discard excess.
If the second is less than the first, add elements in a circular.
That is, to pair them in this way
first list:
Code:
a b c d i f gg

second list:
Code:
1 2 13

desire:
Code:
a1 b2 c13 d1 i2 f13 gg1

What conclusion does not matter. May be so:
Code:
a 1
b 2
c 13
...

With any separator:
Code:
a1,b2,c13,...,gg1

Since the parameters were passed to the function and it was possible to calculate the length of the first list in advance,
the solution was to make the second list redundant and cut off the necessary from the head
Code:
arr=(a b c d i f gg) #arr=($1)
paste <(fmt -1 <<<"a b c d i f gg") <(printf %.s'1 2 13 ' $(seq ${#arr[@]}) | fmt -1 | head -${#arr[@]})

Or a more accurate solution.
Code:
paste <(fmt -1 <<<"a b c d i f gg") <(yes $'1\n2\n13' | head -${#arr[@]})

Moreover, it is not difficult to convert a variable into functions yes "${2// /$'\n'}"
On the fly from the command line, it will be harder to do!
It seems to me that the solution should be very simple and I'm missing something
I am also interested in decisions regarding single-character lists. I would be grateful for all the solutions.
Thanks everyone

Last edited by nezabudka; 01-16-2020 at 08:54 AM..
# 2  
Old 01-16-2020
How about (not THORUOGHLY tested!):

Code:
$ L1=( a b c d i f gg )
$ L2=( 1 2 13 )
$ for i in ${!L1[@]}; do echo ${L1[i]}${L2[i%${#L2[@]}]}; done
a1
b2
c13
d1
i2
f13
gg1

Pipe through paste -sd" " to get your desired result.

Last edited by RudiC; 01-16-2020 at 09:22 AM..
These 2 Users Gave Thanks to RudiC For This Post:
# 3  
Old 01-16-2020
Yes, it's very convenient to insert any separator character or even string,
and if I put in quotation marks then any whitespace characters without "paste"
Code:
for i in ${!L1[@]}; do echo ${L1[i]}.....${L2[i%${#L2[@]}]}; done

Thanks
# 4  
Old 01-16-2020
Slightly more "traditional" way of doing this:

Code:
for (( i=0; i<${#L1[@]}; i++ ))
do
   printf "%s %s\n" "${L1[i]}" "${L2[i%${#L2[@]}]}"
done

or
Code:
lenL1=${#L1[@]} lenL2=${#L2[@]}
for (( i=0; i<lenL1; i++ ))
do
   printf "%s %s\n" "${L1[i]}" "${L2[i%lenL2]]}"
done

This User Gave Thanks to Scrutinizer For This Post:
# 5  
Old 01-16-2020
Yes, it's cool.
"${L2[i%lenL2]]}"
This algorithm can be organized even on "awk" or "bc" with a large size of values
Thanks @Scrutinizer

Previous Thread | Next Thread
Test Your Knowledge in Computers #146
Difficulty: Easy
In 1983, Richard Stallman announced the GNU (short for "GNU's Not Unix") project, to create a proprietary, commercial software Unix-like system.
True or False?

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Issue with Lists

Hey guys, so I wrote this simple script. The first time I typed it all out, I had the issue where whatever choice I entered, it would simply tell me it was a "bad selection" aka the else output. I redid everything, and now no matter the choice, it does the backup option.. My brain hurts, and... (12 Replies)
Discussion started by: jakelawson44
12 Replies

2. UNIX for Dummies Questions & Answers

Lists in awk

Hi togehter! I would like to write an awk script which prints the first column divided by the sum of the second column: So if this is my list 1 2 2 1 3 1 4 1 it should print a list like this: 1/5 2/5 3/5 4/5 My idea was to use END like this: (3 Replies)
Discussion started by: bjoern456
3 Replies

3. Shell Programming and Scripting

get the lists

I expert, I may cross post something similar but I dirtyed my quesion somehow to be clear in the thread #cat file1 88dee gcc: Grok for callconvention-hard to enable hard float a2ad2 eglibc: package mtrace separately 61487 python: bump PR of packages after update of distutils.bbclass... (1 Reply)
Discussion started by: yanglei_fage
1 Replies

4. Shell Programming and Scripting

combining two lists

Hi, So I I received two lists for my merchandise and both are similar but differences do occur. I want to combine two lists that have similar names but I dont want the similar name to come up twice because I will end up purchasing two of those items. Heres an example below (file is massive). ... (1 Reply)
Discussion started by: kylle345
1 Replies

5. Shell Programming and Scripting

Using foreach with two lists

Hi everybody, I'm trying to use a foreach command with two lists. The file.txt looks like this: var1: 100 200 300 var2: 3 6 9 I'm trying to use a foreach command to associate the two variables together. My script looks like this: #! /bin/tcsh set a=(`cat file.txt | grep 'var1' | cut -d... (8 Replies)
Discussion started by: SimonWhite
8 Replies

6. Shell Programming and Scripting

Shell Script to Create non-duplicate lists from two lists

File_A contains Strings: a b c d File_B contains Strings: a c z Need to have script written in either sh or ksh. Derive resultant files (File_New_A and File_New_B) from lists File_A and File_B where string elements in File_New_A and File_New_B are listed below. Resultant... (7 Replies)
Discussion started by: mlv_99
7 Replies

7. Shell Programming and Scripting

How to get the files lists

Hi All, Need the help in getting the file list which are generated for the time period. example if i want to get the list of file generated between 11 to 12 clock. i used the find command search the files with -cmin flag with -60. find /home/test/* -cmin -60 -type f -exec ls {} \; ... (2 Replies)
Discussion started by: nmadhuhb
2 Replies

8. AIX

grep using lists?

I have a file that contain a list of files. How can I use grep to search the files in the list for a specific pattern? (2 Replies)
Discussion started by: bbbngowc
2 Replies

9. Shell Programming and Scripting

Question on lists

I'm fairly new to shell scripting and would like to know if what I am seeking to do is possible in shell. I'm trying to make a list of strings. The list will be looped through and each member of the list will be used to pass a parsing option to python. My script looks something like this: ... (3 Replies)
Discussion started by: Nacre
3 Replies

Featured Tech Videos