如何解决如何在bash的嵌套for循环中打印现有文件的一行?
可能这是一个基本而简单的问题,但我已经环顾了两天,但我无法弄清楚解决它的方法。
给定以下两段工作代码:
#!/bin/bash
# First,I need to generate all even numbers for a list of n integers,in this example n=12
for number in 258 256 233 230 212 245 210 229 340 345 110 125; do
for ((counter = 2; counter <= ${number}; counter += 2)); do
printf "$counter\t" >> Even_numbers.txt
done
printf "\n" >> Even_numbers.txt
done
# Then,I need to print each of these lines into a different file with a specific directory structure,# that looks like the following one:
for i in 01 02 03; do
mkdir "${i}"
for j in panel1 panel2 panel3 panel4; do
{
mkdir "${i}/${j}"
for dir in ${i}/${j}; do
printf "# TEXT AAAAA\n" > "${i}/${j}/File_${i}_${j}.par"
printf "# TEXT BBBBB\n" >> "${i}/${j}/File_${i}_${j}.par"
# I need to print here a single line of the "Even_numbers.txt" file
# for each of the File_${i}_${j}.par files
# The 12 lines in the Even_numbers.txt file and the 12 .par files
# are in the same order.
printf "# TEXT CCCCC\n" >> "${i}/${j}/File_${i}_${j}.par"
done
}
done
done
我需要在第二个代码块中生成的每个文件中打印一行“Even_numbers.txt”文件。问题是无论我做什么,我总是将整个文件内容写入每个输出,而不是我需要的行。 “Even_numbers.txt”文件具有相同的行数,这些行的排序顺序与每个子目录中随后生成的文件的顺序相同。
非常感谢任何帮助。
谢谢,
解决方法
首先,您可以一次创建所有目录:
mkdir -p {01..03}/panel{1..4}
要在每个文件中放置一行,请重定向来自 Even_numbers.txt
的循环输入,并在循环内使用 read
一次获取一行。
for i in 01 02 03; do
for j in panel1 panel2 panel3 panel4; do
parfile="${i}/${j}/File_${i}_${j}.par"
read number
printf "# TEXT AAAAA\n# TEXT BBBBB\n%s\n# TEXT CCCCC\n" "$number" > "$parfile"
done
done < Even_numbers.txt
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。