+ -
当前位置:首页 → 问答吧 → 请大牛们帮忙解释一下这句AWK

请大牛们帮忙解释一下这句AWK

时间:2011-10-09

来源:互联网

awk 'BEGIN{}{if(NR==FNR){ts[i]=$0;i=i+1;} if(NR>FNR) { print ts[t] " " $0; t=t+1; }}END{}' 1.txt pid1.txt >a.txt
参数太复杂有点儿晕菜了

作者: gwssgc   发布时间: 2011-10-09

我也晕,下面单独每一行都是什么意思啊

awk
'
BEGIN{}
{
    if(NR==FNR)
        {ts[i]=$0;i=i+1;}
        if(NR>FNR)
              { print ts[t] " " $0; t=t+1; }
}
END{}
'
1.txt pid1.txt
>a.txt

作者: 相思爱文   发布时间: 2011-10-09

顶起,请awk大牛指教!

作者: gwssgc   发布时间: 2011-10-09

本帖最后由 yanyongkg 于 2011-10-16 23:21 编辑

awk在处理两个文件时,当读到第二个新文件时FNR都重新从1开始记数,而NR就一直自增下去
NR==FNR可以判断出awk此时是在处理第一个文件
NR>FNR可以判断出awk此时在处理第二个文件

BEGIN{}
END{}
这两个是脱裤子放P,既然action部分什么也不做,干嘛还要加它!
  1. {ts[i]=$0;i=i+1;}
复制代码
把第一个文件1.txt的每一行依次存在数组ts  以i为数组下标,并做自加i++
也就是第一行存到ts[""]  不是ts[0]哦,i被初始为空值哦,刚开始我也以为是ts[0]
第二行存到ts[1]
第三行存到ts[2]


  1. { print ts[t] " " $0; t=t+1; }
复制代码
当读到第二个文件pid1.txt时,取出数组ts中保存的第一个文件的每一行,并插入到第二个文件每一行前并加一个空格
取出数组中保存的数据道理同前保存数据时

最后输出定向到a.txt

作者: yanyongkg   发布时间: 2011-10-16