在bash中遍历值对

在bash中遍历值对

我有10个文本文件,我想paste每个文件与它的对,这样我有5个总文件。

我尝试了以下几点:

for i in 4_1 5_1 6_1 7_1 8_1dofor j in 4_2 5_2 6_2 7_2 8_2dopaste ${i}.txt ${j}.txt > ${i}.${j}.txtdonedone

但是,这段代码结合了所有可能的组合,而不仅仅是组合匹配的对。

所以我想要文件4_1.txt成对4_2.txt5_1.txt带着5_2.txt


慕姐8265434
浏览 406回答 3
3回答

莫回无

如果要使用一个变量并对其执行和操作,只需使用一个循环:for file in 4 5 6 7 8do    paste "${file}_1" "${file}_2"done这就行了paste 4_1 4_2paste 5_1 5_2...

呼如林

我同意fedorqui目前在提出的问题中提出的答案。以下只是提供一些更一般的答案。另一种常用的方法(对于bash 4.0或更新版本)是将您的对存储在一个关联数组中: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另一个(与bash的旧版本兼容)是使用多个常规数组: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

慕婉清6462132

可以使用关联数组:animals=(dog cat mouse)declare -A size=(   [dog]=big  [cat]=medium  [mouse]=small)declare -A sound=(   [dog]=barks  [cat]=purrs  [mouse]=cheeps)for animal in "${animals[@]}"; do   echo "$animal is ${size[$animal]} and it ${sound[$animal]}"done这允许你遍历对,三倍,等等,学分:最初的想法是取自@CharlesDuffy-s的答案。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python