当前位置:Linux教程 - Shell - shell - awk文本处理

shell - awk文本处理

awk文本处理
2004-04-23 15:18 pm
来自:Linux文档
现载:Www.8s8s.coM
地址:无名

我有2个文本文件
我从第一个文本文件中取得一行文本中变量中的字符串,再附值另一个变量----这一步我已实现

现我想到第二文本中搜索上一步附值的变量,并从搜索到的行或行中的某一变量中取得字符
串变量再返回第一文本中执行命令(余下命 令中要用到第二文本中取得的字符串变量)。

请高手出手,不知该如何实现???????

能不能给两个文本,这种东西每个实现方式多是不一样的

tmp1:
qwe rtgbh52800op
poil 7851fghjj874
tmp2
poil 999rrr
qwe uytppp
我现在要用tmp2中的$2字段中的几个字符串替换tmp1中的$2字段中的几个字符串

Like database, use 'join' !

当然不是这么简单

我也想问问?AWK中能同时对两个文件操作吗?或者AWK可以嵌套吗?如果都不行,那你可以试试用SHELL编个小程序。
for var1 in `cat tmp1'
done
for var2 in 'cat tmp2'
done
if var1 ? var2 then
command var1 var2
do
do
当然我也知道的不多,你可以考虑类似的想法!


awk ' BEGIN { i=1
while((getline < "tmp2")>0)
{ F[[i]]=$1; S[[i]]=$2; i++ }
line=i
}
{ for(j=1;j<=line;j++)
{ if($1==F[[j]]) printf "%s,%s ",$1,S[[j]] }
}
' tmp1
先把tmp2文件的$1,$2读入数组,然后再操作tmp2

-------------

Sorry: 昨天写完之后没有仔细看

楼上的是否应是 { F[i]=$1; S[i]=$2; i++ }

如果要求就是像tmp1,tmp2那样,为什么不这样:(要是想把tmp1中不匹配的也打出来稍微改动即可)
while read line;do
key=`echo $line|cut -d" " -f1`
grep $key tmp2
done < tmp1

如果两个排序后第一列一样的话,用paste也很简单.

第一列不一样的


我有如下二个文本temp1
qwaszbbbpol 2001020300000666.25000009875213
rfvcgaaaujn 3021545669000008.99000000000512
... ...
temp2
985hjklfsaaa95fh 7845.56
fv5684521bbbtgd6 44.14
... ...
现要根据第一列中字段中的aaa或bbb,... 为两个文本的对应关系,搜索到以后用temp2中
的$2值替换temp1中$2中的有小数点的其中几个字符或数值

DO YOU KNOWN ????

我想你的问题只不过又增加了复杂度。
你可以在awk里用substr。

不喜欢做类似的家庭作业。
是Do you know吧。

这是我的实际问题,我要统计数据!

我靠,受不了了。(对不起,我很少这么冲动),发帖子也是要讲学问的,否则只有让人生厌,哪里能解决问题。我先泛泛说说发帖的问题:
有内容(不要只靠个标题就over了吧)
题目既引人又能实事求是的说明问题("help!求救!"来这的,有谁不是要说help的?将来看到这样的题目谁能知道是干什么的?)
经过自身思考(不要东抄西抄,或是有一点问题,毫不探究,直接问将上来,连自己身边的参考书或是man帮助都不查一下;别人的回答,即使没有100%解决问题,关键地方解决了,其余凭自己完全可以搞定,也不死心的追问不停,直到获得100%的代码,paste完事)
表达清楚(是什么就是什么,颠三倒四或是含糊其辞、连连省略地说一大通,唐僧也要自愧不如的)
描述详尽(发了帖自己至少要推敲一番,假定别人完全没有你的问题背景,能不能领会你的意思?相关的细节是否说清楚了呢?不要让别人反复追问你细节都得7,8帖吧)

这位ljp0683仁兄,也许你的问题涉及保密性,你可以不按问题的原样来问大家,可是就得保证你的描述方式是清楚地啊。大家好意的猜测你的意思,提出自己的解决方法,你再挤牙膏地告诉,不是这样不是那样,最终举的例子也没把问题说清楚,还挺有火气。斑竹的目前的回应心情也就完全可以理解了。
我来问问你的描述是什么意思?第一列的aaa,bbb是怎样确定的?是几个连续的字符?(若是,那是连续几个呢)还是从固定的第几个字符算起到第几个字符结束?找不到对应关系的行怎么处理?还有到底是temp2的$2替换temp1的$2的哪个?是$2全部,还是小数点部分?
大家对你的几个回答,一点启发都没有?不能根据大家的思路完成其余的工作?
我们对你的问题背景一无所知,对于我们来说没有默认值的,所以才需要你描述清楚啊!要是多几个这样的帖子,大家的耐心都会磨没的,日子长了,这个论坛也就自己消亡了。