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 这样,
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