Board logo

标题: [问题求助] gawk中如何以字段为变量名? [打印本页]

作者: 随风    时间: 2009-6-3 04:30     标题: gawk中如何以字段为变量名?

gawk 中如何以字段为变量名
a.txt内容就2行
a b
c d
我希望设变量 a=b c=d,并且是END后面显示
即:第一字段为变量名,第二字段为变量的值,该怎么作?
我用下面的代码结果不对
gawk "{$1=$2}END{print a,b}" a.txt

补充说明
a.txt 内容行的位置不确定
a 1234 ldksjfa
e adfja
t 73748357 dsfadsfa
b 5678 dsfdsaf
f 000 fefdsf
afa fdsafjafu
h 333
uus 9564

需要显示的效果为一行,顺序不能变  a=1234 b=5678 h=333 f=000



.


.

[ 本帖最后由 随风 于 2009-6-3 18:08 编辑 ]
作者: Batcher    时间: 2009-6-3 08:16

建议在Shell版块进行讨论
作者: 随风    时间: 2009-6-3 18:23

求得一答案,但有几处不解,谁懂的麻烦解答下,先谢了!!
for 中 v 右边的两个引号有什么作用?发现去掉也能正确运行。
问号在这里起什么作用?看帮助里说是 左边的字符重复0到1次,本例中有何作用?
冒号是干什么的?右边的两个引号有什么用?
总的来说对(v?" ":"")整句的作用不理解,发现不要也行。
改为 for (j=1;j<=n;j+=1) v=v " " b[j]"="a[b[j]]  结果也正确。迷惑中~~
原始答案:
  1. $1~/^[abfh]$/ {
  2.     n+=1;b[n]=$1;a[$1]=$2
  3. }
  4. END{
  5.    for (j=1;j<=n;j+=1) v=v""(v?" ":"")b[j]"="a[b[j]]
  6.    print v
  7. }
复制代码

[ 本帖最后由 随风 于 2009-6-3 18:25 编辑 ]
作者: terse    时间: 2009-6-5 21:07

没人来啊
是不是 去前面空格的啊
随风兄看是否 像正则表达的样子
练手一个  这样也可
  1. $1~/^[abfh]$/ {
  2.     n++;b[n]=$1"="$2" "
  3. }
  4. END{
  5.    for (j=1;j<=n;j+=1) v=v b[j]
  6.    print v
  7. }
复制代码

作者: 随风    时间: 2009-6-5 21:57     标题: 回复 4楼 的帖子

论坛好像研究 gawk 的不多,我也是三天新鲜,用他还是没脱离bat 的思路,感觉就是另一个cmd而以,里面的函数应该很有用,不过没用过 (^_^)




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2