[求助] awk脚本编写[已解决]

sh/bash/dash/ksh/zsh等Shell脚本
回复
feisuzhu
帖子: 31
注册时间: 2008-02-06 13:24

[求助] awk脚本编写[已解决]

#1

帖子 feisuzhu » 2009-02-13 16:40

现在有一堆数据,格式是这样

foo bar foo1/foo2/bar1/bar2 foobar barfoo
...

想要把他扩展成

foo bar foo1 foobar barfoo
foo bar foo2 foobar barfoo
foo bar bar1 foobar barfoo
foo bar bar2 foobar barfoo
....


请问一下,awk脚本改怎么写?

如果awk不方便,bash 或者 perl 都可以

答案在6楼
感谢aerofox!
上次由 feisuzhu 在 2009-02-14 17:39,总共编辑 1 次。
edifie
帖子: 29
注册时间: 2007-04-27 23:22

Re: [求助] awk脚本编写

#2

帖子 edifie » 2009-02-13 17:24

line='foo bar foo1/foo2/bar1/bar2 foobar barfoo'
i=`echo $line | cut -d ' ' -f1,2`
j=`echo $line | cut -d ' ' -f4,5`
echo $line | cut -d ' ' -f3 | sed "s/\([^/]*\)/$i \1 $j\n/g" | tr -d '/'
feisuzhu
帖子: 31
注册时间: 2008-02-06 13:24

Re: [求助] awk脚本编写

#3

帖子 feisuzhu » 2009-02-13 17:50

谢谢楼上的 :em11

自己写的Perl版,本来以为又没人理我呢了……

代码: 全选

#!/usr/bin/perl -w
while(<>)
{
	($a,$b,$c,$d,$e)=split(' ',$_,-1);
	@foo=split('/',$c);
	for($i=0;$i<@foo;$i++)
	{
		print "$a $b $foo[$i] $d $e\n";
	}
}

feisuzhu
帖子: 31
注册时间: 2008-02-06 13:24

Re: [求助] awk脚本编写

#4

帖子 feisuzhu » 2009-02-13 18:03

2楼的命令看懂了

把每一行拆成3部分,

1 foo bar
2 foo1/foo2/bar1/bar2
3 foobar barfoo

然后把第2部分的每一个 foo1 , foo2 , .... 替换成 <第一部分 foo1 第2部分> , <第一部分 foo2 第2部分> ....
最后用tr 删掉/

精彩!
虽然不太认同这种方式,但是edifie的努力和关注再次表示感谢!
feisuzhu
帖子: 31
注册时间: 2008-02-06 13:24

Re: [求助] awk脚本编写

#5

帖子 feisuzhu » 2009-02-13 18:08

对了,还是期待awk的脚本……

PS:上次学校给了个1000行+的xls,就让我干这个……如果只是干这个,VBA真TMD难用……
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: [求助] awk脚本编写

#6

帖子 aerofox » 2009-02-13 20:46

代码: 全选

#!/usr/bin/awk -f
{
    split($3, A, "/");
    for( f in A ) {
	print $1, $2, A[f], $4, $5;
    }
}
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: [求助] awk脚本编写

#7

帖子 xiooli » 2009-02-13 21:38

笨办法:

代码: 全选

cat file|while read line;do i=`echo $line | cut -d ' ' -f1,2`;j=`echo $line | cut -d '' -f4,5`;echo $line|sed "s/\//@\n@/g"|sed "s/^@/$i /;s/@$/ $j/";done
feisuzhu
帖子: 31
注册时间: 2008-02-06 13:24

Re: [求助] awk脚本编写

#8

帖子 feisuzhu » 2009-02-14 17:34

谢谢6楼的aerofox!测试成功!
也同样谢谢xiooli!
回复