linux awk文件?linux版软件网站

各位老铁们好,相信很多人对linux awk文件都不是特别的了解,因此呢,今天就来为大家分享下关于linux awk文件以及linux版软件网站的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

linuxawk多文件操作2种实现方法

我们经常会将2个有关联文本文件进行合并处理。分别从不同文件获取需要的列,然后,整体输出到一起。awk进行多文件处理时候,常常会遇到2个方面问题,第一个是怎么样合并多个文件为一个文件。第二个问题就是怎么样将多行合并为一行显示。我这里说下我的处理2种方法,还有实现思路。

实例文本:

复制代码代码如下:

[chengmo@centos5 shell]$ awk'FNR==1{print"\r\n"FILENAME}{print$0}' a.txt b.txt

a.txt

100 wang man

200 wangsan woman

300 wangming man

400 wangzheng man

b.txt

100 90 80

200 80 70

300 60 50

400 70 20

需要合并得到结果:

100 wang man 90 80

200 wangsan woman 80 70

300 wangming man 60 50

400 wangzheng man 70 20

awk多文件操作方法一:

实现思路:

通过外部命令合并文件,然后通过排序,然后通过awk进行合并操作。

首先:

复制代码代码如下:

[chengmo@centos5 shell]$ cat a.txt b.txt| sort-n-k1|awk'{print}'

100 90 80

100 wang man

200 80 70

200 wangsan woman

300 60 50

300 wangming man

400 70 20

400 wangzheng man

现在需要把:第一列相同的处理合并到一行,这里需要用“next”语句。它操作,可以参考awk多行合并【next使用介绍】(常见应用4)

继续:

复制代码代码如下:

[chengmo@centos5 shell]$ cat a.txt b.txt| sort-n-k1|awk'NR%2==1{fd1=$2"\t"$3;next}{print$0"\t"fd1}'

100 wang man 90 80

200 wangsan woman 80 70

300 wangming man 60 50

400 wangzheng man 70 20

需要把几行合并,经常用到方法是:NR%num然后将行值保存下来,next该行。在输出时候打印出来。

awk多文件操作方法二

实现思路

不借助第3放工具打开,直接通过awk打开多个文件。然后可以通过:FILENAME获得当前处理文件名。NR总记录 FNR当前文件记录,以及ARGC传入参数总数,ARGV是数组,各个参数值。

看下这些实例:

复制代码代码如下:

[chengmo@centos5 shell]$ awk'BEGIN{print ARGC,ARGV[0],ARGV[1],ARGV[2]}{print FILENAME,NR,FNR,$0}' a.txt b.txt

3 awk a.txt b.txt

a.txt 1 1 100 wang man

a.txt 2 2 200 wangsan woman

a.txt 3 3 300 wangming man

a.txt 4 4 400 wangzheng man

b.txt 5 1 100 90 80

b.txt 6 2 200 80 70

b.txt 7 3 300 60 50

b.txt 8 4 400 70 20

程序代码:

复制代码代码如下:

[chengmo@centos5 shell]$ awk'

BEGIN{

if(ARGC<3)

{

exit 1;

}

file="";

}

{

aData[FILENAME,$1]=ARGV[1]==FILENAME?$0:$2"\t"$3;

}

END{

for(k in aData)

{

split(k,idx,SUBSEP);

if(idx[1]==ARGV[1]&&(ARGV[2],idx[2]) in aData)

{

print aData[ARGV[1],idx[2]],aData[ARGV[2],idx[2]]|"sort-n-k1";

}

}

}' a.txt b.txt

100 wang man 90 80

200 wangsan woman 80 70

300 wangming man 60 50

400 wangzheng man 70 20

代码说明:

这里用到2维数组,aData[文件名,关联列对应值],这种方法可以将多个文件内容。放入一个统一二维数组。然后循环数组,通过if((i,j} in array)查找对应列值,在其它文件中是否存在。

以上是2种实现方法,其中第一种思路较为简单,很容易理解。第二种处理起来较为复杂。有更好方法大家给我分享。

linux shell 有关文件的读取

几点问题:

1)管道符后面的命令都是要新建shell去执行的,也就是说,while循环中的内容都不是在当前shell中执行,而array是在while循环中赋值的,所以当执行完while循环返回到当前shell后,array的值丢失。

这一点必须清楚:新建shell可以继承当前shell的变量,相当于拷贝了变量的一个副本,而命令执行完退出新建shell后,新建shell中的变量也都随之湮灭。

2)awk本身就是逐行读入并处理文件的,while read line也是这样,功能上有重叠,一般用其一即可,特殊情况除外。

3)这就一个字段而已,何必用数组array呢?当然,你要用数组也是可以的,只是我有点不理解。

4)如果$1是一个文件,不需要cat后再通过管道符传递,awk本身就可以直接处理文件

awk-F='$1~/'$args'/{print$2}'$1就可以,管道符能少用则少用。

修改建议:

保留awk,去除while read line,试试:

array=(`awk-F='$1~/'$args'/{print$2}'$1`)

echo${array[0]}

如果要保留你的while read line结构,那么:

whilereadline

do

array=(`echo"$line"|awk-F='$1~/'$args'/{print$2}'`)

done<$1

echo${array[0]}

一文教会你使用Linux三剑客(grep、sed、awk)处理文本文件

大家好,我是怪兽。

作为一名合格的程序员,在实际开发中,我们常常需要在服务器终端执行一些运维操作,而在服务器上没有图形界面,所以处理文本文件显得尤为麻烦。但Linux的强大终端命令提供了比图形界面更强大的功能,今天怪兽将教你快速掌握Linux中的文本处理三剑客——grep、awk、sed。

Linux文本处理三剑客包括grep、awk、sed,它们以正则表达式作为基础。标准和扩展正则表达式在Linux系统中得到支持。首先,我们来明确一下这三剑客的特点及应用场景。

grep命令家族包括grep、egrep、fgrep三个子命令,适用于不同场景。

我们以新建的testGrep文件为例,内容如下:

1.找到包含Grep字符串的所有内容行

2.精确查找Grep4字符串所在的内容行

3.忽略大小写查找test字符串所在的内容行

4.从标准输入来过滤忽略大小写查找test字符串所在的内容行

执行以上命令结果如下:

通过上面的结果可以看到,并非精确查找只包含Grep字符串的内容,而是模糊匹配,只要是包含Grep字符串,其内容都会被检索到。

执行上面的命令并不能查到任何结果,这是因为grep命令默认是严格大小写的,所以如果想要查找到test字符串所在的内容行,必须通过参数设定来忽略大小写。

sed命令是Stream Editor的缩写,在处理行内容时功能强大,通过脚本来处理文本文件或标准输入。

使用sed命令的语法如下,我们通过新建的sedtest.txt文本文件为例:

案例操作总结:

1.参数介绍

2.动作介绍

awk命令由发明该工具的三位作者姓名首字母组成,用于格式化输出,三位作者分别是:

awk按照行来读取文档,根据输入分隔符切分成小部分,用内建变量表示。

常用参数如下,我们以新建的log.txt文本文件为例:

格式化输出内容

指定分隔符格式化输出内容

设置变量并在脚本内使用

通过指定脚本来处理文本文件

awk的三位创建者已将其定义为“样式扫描和处理语言”,详细学习可参考:awk.readthedocs.io/en/l...

接下来通过编写awk脚本来统计学生成绩数据,新建student.txt文本文件,内容如下:

编写script.txt脚本如下:

执行命令并得到执行结果。

通过脚本修改统计计算之前的匹配条件,只统计ss同学的成绩。

总结如下:

可以使用$+数字的形式表示当前行的第几列,$0表示整行内容。

可以通过-F参数指定分隔符。

可以通过-v参数定义变量并在脚本中使用。

可以通过-f参数指定脚本文件位置,实现文本文件处理。

这就是Linux文本处理三剑客grep、awk、sed的使用方法和技巧,希望对你有所帮助!

阅读剩余
THE END