Bash制作循环多次重复代码

时间:2017-08-29 11:39:35

标签: bash loops multiple-files

我有一个名为list_of_files.txt的文件,它是500多个其他文件的列表。它看起来像这样:

list1.txt
list2.txt
list3.txt
etc

这列出所有类似的内容:(所有列都由数值组成)     value1 value2 value3     value4 value5 value6     等

对于这些列表中的每一个,我想剪切一个感兴趣的列,对其进行排序以使该数字按递增顺序排列并检查我的原始文件和新文件是否具有相同的顺序。

我尝试制作一个循环.sh脚本,如下所示:

for i in list_of_files.txt
do
cut -f3 -d " " list*.txt > chr*_all_positions.txt
sort -n chr*_all_positions.txt > chr*_ordered_positions.txt
diff chr*_all_positions.txt chr*_ordered_positions.txt > result_*.txt
done    

然而,这不起作用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

循环覆盖数字,而不是文件名:

i=1
while [[ -f list$i.txt ]] ; do
    cut -f3 -d " " list$i.txt > chr$i\_all_positions.txt
    sort -n chr$i\_all_positions.txt > chr$i\_ordered_positions.txt
    diff chr$i\_all_positions.txt chr$i\_ordered_positions.txt > result_$i.txt
    ((i++))
done

此外,您可以使用sort -csort -C检查输出是否已排序,而无需创建_ordered文件。

答案 1 :(得分:0)

使用readarray和array

readarray -t arrname < list_of_files.txt

for filename in "${arrname[@]}"; do
    ...
done

使用read builtin

while read filename; do
    ...
done < list_of_files.txt