Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
shell脚本编写do循环_Shell_Loops_Unix - Fatal编程技术网

shell脚本编写do循环

shell脚本编写do循环,shell,loops,unix,Shell,Loops,Unix,对不起,我是unix新手,但是我想知道我是否可以将下面的代码生成一个循环。例如,文件名每次从1更改为50 我的剧本是 cut -d ' ' -f5- cd1_abcd_w.txt > cd1_rightformat.txt ; sed 's! \([^ ]\+\)\( \|$\)!\1 !g' cd1_rightformat.txt ; sed -i 's/ //g' cd1_rightformat.txt; cut -d ' ' -f1-4 cd1_abcd_w.txt > cd

对不起,我是unix新手,但是我想知道我是否可以将下面的代码生成一个循环。例如,文件名每次从1更改为50

我的剧本是

cut -d ' ' -f5- cd1_abcd_w.txt > cd1_rightformat.txt ;
sed 's! \([^ ]\+\)\( \|$\)!\1 !g' cd1_rightformat.txt ;
sed -i 's/ //g' cd1_rightformat.txt; 
cut -d ' ' -f1-4 cd1_abcd_w.txt > cd1_extrainfo.txt ;
我想把它变成一个循环,在这个循环中,cd1_abcd_w.txt将变成cd2_abcd_w.txt,输出将是cd2_rightformat.txt等等…一直到50。 基本上是cd$i


非常感谢

bash
中,您可以使用大括号扩展:

for num in {1..10}; do
    echo ${num}
done
与i=1到10的基本
循环类似,它包括两端,该循环将输出数字1到10

然后,您只需将
echo
命令替换为您需要执行的任何操作,例如:

cut -d ' ' -f5- cd${num}_abcd_w.txt >cd${num}_rightformat.txt
# and so on

如果需要小于10的数字具有前导零,请将
for
循环中的表达式改为
{01..50}
。这里的情况似乎不是这样,但知道它很方便


此外,在“不需要但方便了解”类别中,如果不想使用默认值,也可以指定一个增量:

pax> for num in {1..50..9}; do echo ${num}; done
1
10
19
28
37
46
(相当于i=1到50步骤9的基本
)。

这应该可以:

for((i=1;i<=50;i++));do
cut -d ' ' -f5- cd${i}_abcd_w.txt > cd${i}_rightformat.txt ;
sed 's! \([^ ]\+\)\( \|$\)!\1 !g' cd${i}_rightformat.txt ;
sed -i 's/ //g' cd${i}_rightformat.txt; 
cut -d ' ' -f1-4 cd${i}_abcd_w.txt > cd${i}_extrainfo.txt ;
done
((i=1;i cd${i}_rightformat.txt; sed的!\([^]\+\)\(\\$\)!\1!g'cd${i}\u rightformat.txt; sed-i的///g'cd${i}\u rightformat.txt; 剪切-d'-f1-4 cd${i}\u abcd_w.txt>cd${i}\u extrainfo.txt; 完成
这将在bash中起作用:

for in in $(seq 50)
do
cut -d ' ' -f5- cd$i_abcd_w.txt > cd$1_rightformat.txt;
sed 's! \([^ ]\+\)\( \|$\)!\1 !g' cd$i_rightformat.txt;
sed -i 's/ //g' cd$i_rightformat.txt; 
cut -d ' ' -f1-4 cd$i_abcd_w.txt > cd$i_extrainfo.txt;
done