Looping over pairs of values in bash

前端 未结 7 2038
萌比男神i
萌比男神i 2020-11-22 03:19

I have 10 text files and I want to paste each file with its pair, such that I have 5 total files.

I tried the following:

for i in 4_1 5_         


        
7条回答
  •  渐次进展
    2020-11-22 03:48

    I agree with the answer currently proposed by fedorqui in the context of the question currently asked. The below is given only to provide some more general answers.

    One more general approach (for bash 4.0 or newer) is to store your pairs in an associative array:

    declare -A pairs=( [4_1]=4_2 [5_1]=5_2 [6_1]=6_2 [7_1]=7_2 [8_1]=8_2 )
    for i in "${!pairs[@]}"; do
      j=${pairs[$i]}
      paste "$i.txt" "$j.txt" >"${i}.${j}.txt"
    done
    

    Another (compatible with older releases of bash) is to use more than one conventional array:

    is=( 4_1 5_1 6_1 7_1 8_1 )
    js=( 4_2 5_2 6_2 7_2 8_2 )
    for idx in "${!is[@]}"; do
      i=${is[$idx]}
      j=${js[$idx]}
      paste "$i.txt" "$j.txt" >"$i.$j.txt"
    done
    

提交回复
热议问题