对不起,我对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 etc...all,方式是50。所以本质上是cd$i。
非常感谢
发布于 2015-05-14 01:59:13
在bash中,您可以使用大括号扩展:
for num in {1..10}; do
echo ${num}
done类似于一个基本的for i = 1 to 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(相当于基本的for i = 1 to 50 step 9)。
发布于 2015-05-14 02:30:23
这应该是可行的:
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发布于 2015-05-14 06:40:06
这将适用于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;
donehttps://stackoverflow.com/questions/30228060
复制相似问题