I have two files - one contains the addresses (line numbers) and the other one data, like this:
address file:
2
4
6
7
1
3
5
data file
1.000451451
2.000589214
3.117892278
4.479511994
5.484514874
6.784499874
7.021239396
I want to randomize the data file based on the numbers of address files so I get:
2.000589214
4.479511994
6.784499874
7.021239396
1.000451451
3.117892278
5.484514874
I want to do it either in python or in bash, but didn't yet find any solution.
If you don't mind sed
, we can use process substitution to achieve this easily:
sed -nf <(sed 's/$/p/' addr.txt) data.txt
-n
suppresses the default printing-f
makes sed
read commands from the process substitution <(...)
<(sed 's/$/p/' addr.txt)
creates sed
print commands based on line numbers in addr.txt
Gives the output:
2.000589214
4.479511994
6.784499874
7.021239396
1.000451451
3.117892278
5.484514874
With awk
:
awk 'NR==FNR {a[NR]=$0; next} {print a[$0]}' data.txt addr.txt
NR==FNR {a[NR]=$0; next}
creates an associative array a
with keys being the record (line) number and values being the whole record, this would be applicable only for the first file (NR==FNR
), which is data.txt
. next
makes awk
to go to the next line without processing the record any further
{print a[$0]}
prints the value from the array with keys being the currect file's (addr.txt
) line (record) number
Example:
% cat addr.txt
2
4
6
7
1
3
5
% cat data.txt
1.000451451
2.000589214
3.117892278
4.479511994
5.484514874
6.784499874
7.021239396
% awk 'NR==FNR {a[NR]=$0; next} {print a[$0]}' data.txt addr.txt
2.000589214
4.479511994
6.784499874
7.021239396
1.000451451
3.117892278
5.484514874
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With