shell脚本编写do循环
对不起,我是unix新手,但是我想知道我是否可以将下面的代码生成一个循环。例如,文件名每次从1更改为50 我的剧本是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
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