Chinaunix

标题: awk的for循环遍历 [打印本页]

作者: gazal    时间: 2015-07-24 10:27
标题: awk的for循环遍历
本帖最后由 gazal 于 2015-07-24 10:28 编辑

一个脚本有两个参数,第二个参数的逗号个数是未知的,
如: ./1.sh 252 1,2,3  或者  ./1.sh 252 1,2,3,4,5
我想得到的结果是 252:1,252:2,252:3或者252:1,252:2,252:3,252:4,252:5

请问怎么写能实现这个功能?

我这样写了一下,得到的结果不对:
IFS=,
j=0
R=$1
for i in $2           
do
    ((j++))
done
DISK=`echo $2 | awk -F, '{for(k=0;k<$j;++k) print $R,$k}'`
echo $DISK

awk里面的$k只是打印k的值,$R的值打印不出来
作者: haooooaaa    时间: 2015-07-24 10:33
本帖最后由 haooooaaa 于 2015-07-24 10:51 编辑

$j 直接   awk -vp=$j  这样,
  1. echo "252 1,2,3" |awk '{split($2,t,",");l=length(t);for(i=1;i<l;i++){printf $1":"t[i]","}print $1":"t[l]}'
复制代码

作者: gazal    时间: 2015-07-24 11:08
本帖最后由 gazal 于 2015-07-24 11:10 编辑

回复 2# haooooaaa
谢谢,测试是可以的,学习一下,再问一个问题,我像下面这样写:
j=0
IFS=,
a=`for i in $2
do
    echo -n "$1 : $i"
    echo -n ','
done`
echo $a

./1.sh 252 1,2,3  只能得到252:1 252:2 252:3,逗号得不到,下面这样写:

a=`for i in $2
do
    echo -n "$1 : $i"
    echo -n '.'
done`

得到   252:1.252:2.252:3.     "."能打印出来,请问是怎么回事?



   
作者: haooooaaa    时间: 2015-07-24 11:13
回复 3# gazal


    你的IFS设置为 "," 了, 然后还用 "," ,怎么折腾?
作者: gazal    时间: 2015-07-24 11:31
本帖最后由 gazal 于 2015-07-24 11:31 编辑

回复 4# haooooaaa

1.sh:
IFS=,
for i in $2
do
  echo -n "$1 : $i"
  echo -n ','
  done

./1.sh 252 1,2,3   ==> 252:1,252:2,252:3,

1.sh:
IFS=,
a=`for i in $2
do
    echo -n "$1 : $i"
    echo -n ','
done`
echo $a

./1.sh 252 1,2,3  ==> 252:1 252:2 252:3
是不是在赋值时会将IFS对应的值转化为空格?

   
作者: haooooaaa    时间: 2015-07-24 11:33
回复 5# gazal


    看看 shell 13 问
作者: 我爱你我的菜    时间: 2015-09-02 17:39
echo "252 1,2,3" |awk -F'[ ,]' 'BEGIN{ORS=","}''{for(i=2;i<NF;i++){pint $1":"$i}}''END{print $1":"$i"\n"}'

作者: MMMIX    时间: 2015-09-02 17:50
回复 1# gazal


    其实你应该把第二个参数拆开, 用 ./a.sh 255 1 2 3 4 或者 ./a.sh 255 1 2 3 4 5 这种方式调用, 简单方便又高效.
作者: gazal    时间: 2015-09-02 18:11
回复 8# MMMIX
实际调用的时候不止两个参数,可能是 ./1.sh 252 1,2,3 参数3,参数4... ,把逗号拆开写就不好判断参数了



   
作者: MMMIX    时间: 2015-09-02 21:52
回复 9# gazal


    把个数不定的参数放在最后不就结了?还是说其他参数也是可选的?
作者: jason680    时间: 2015-09-02 23:54
回复 9# gazal


>> ...可能是 ./1.sh 252 1,2,3 参数3,参数4... ,把逗号拆开写就不好判断参数了

$ ./1.sh 252 1,2,3 arg3 arg4
Arguments: 252 1,2,3 arg3 arg4
252:1,252:2,252:3

$ ./1.sh 252 1,2,3,4,5 arg3 arg4
Arguments: 252 1,2,3,4,5 arg3 arg4
252:1,252:2,252:3,252:4,252:5

$ cat 1.sh
echo "Arguments: $@"
echo "$1 $2" | awk '{t=split($2,a,",");for(n=1;n<=t;n++){str=str c $1":"a[n];c=","}print str}'

作者: gazal    时间: 2015-09-04 10:15
回复 10# MMMIX
是,最后还有一个参数是可选的,可要可不要


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2