首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shell脚本执行循环

shell脚本执行循环
EN

Stack Overflow用户
提问于 2015-05-14 01:54:27
回答 3查看 58关注 0票数 1

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

我的剧本是

代码语言:javascript
复制
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 etc...all,方式是50。所以本质上是cd$i。

非常感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-14 01:59:13

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

代码语言:javascript
复制
for num in {1..10}; do
    echo ${num}
done

类似于一个基本的for i = 1 to 10循环,它包含在两端,该循环将输出数字1到10。

然后,只需将echo命令替换为所需的任何操作,如:

代码语言:javascript
复制
cut -d ' ' -f5- cd${num}_abcd_w.txt >cd${num}_rightformat.txt
# and so on

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

此外,在不需要但方便知道的类别中,如果不想使用默认的增量,也可以指定增量:

代码语言:javascript
复制
pax> for num in {1..50..9}; do echo ${num}; done
1
10
19
28
37
46

(相当于基本的for i = 1 to 50 step 9)。

票数 2
EN

Stack Overflow用户

发布于 2015-05-14 02:30:23

这应该是可行的:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2015-05-14 06:40:06

这将适用于bash:

代码语言:javascript
复制
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
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30228060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档