大多数命令行工具只能处理一种或两种格式,因此将数据从一种格式转换成另一种格式非常重要。 一旦数据采用了所需的格式,仍然可能会出现丢失值、不一致、奇怪的字符或不必要的部分等问题。...5.1 概述 在本章中,您将学习如何: 将数据从一种格式转换成另一种格式 将 SQL 查询直接应用于 CSV 过滤一行 提取和替换值 拆分、合并和提取列 合并多个文件 本章从以下文件开始: $ cd /...我用来清理纯文本的命令行工具,比如tr和grep,并不总是适用于 CSV。原因是这些命令行工具没有标题、主体和列的概念。如果您想使用grep过滤行,但总是在输出中包含标题,该怎么办?...过滤 CSV 文件中的行与过滤纯文本文件中的行之间的区别在于,您可能只希望根据特定列中的值进行过滤。...这些信息中的大部分都以表格的形式排列,这些表格可以被视为数据集。例如,这个页面包含一个国家和地区的列表,以及它们的边界长度、面积和两者之间的比例。 假设您对分析这些数据感兴趣。
match_patten file // 默认访问匹配行 常用参数: -o 只输出匹配的文本行 VS -v 只输出没有匹配的文本行 -c 统计文件中包含文本的次数 grep -c "text" filename...'s/text/replace_text/g' file 默认替换后,输出替换后的内容,如果需要直接替换原文件,使用-i: seg -i 's/text/repalce_text/g' file 移除空白行...< 5' #行号小于5awk 'NR==1,NR==4 {print}' file #行号等于1和4的打印出来awk '/linux/' #包含linux文本的行(可以用正则表达式来指定,超级强大)awk.../linux/' #不包含linux文本的行 设置定界符 使用-F来设置定界符(默认为空格) awk -F: '{print $NF}' /etc/passwd 读取命令输出 使用getline,将外部...: seq 10 | awk '{printf "->%4s ", $1}' 迭代文件中的行、单词和字符 1.
match_patten file // 默认访问匹配行 常用参数 -o 只输出匹配的文本行 VS -v 只输出没有匹配的文本行 -c 统计文件中包含文本的次数 grep -c "text" filename...] [example] 子串匹配标记 第一个匹配的括号内容使用标记 \1 来引用 sed 's/hello\([0-9]\)/\1/' 双引号求值 sed通常用单引号来引用;也可使用双引号,使用双引号后.../'#包含linux文本的行(可以用正则表达式来指定,超级强大) awk '!.../linux/' #不包含linux文本的行 设置定界符 使用-F来设置定界符(默认为空格) awk -F: '{print $NF}' /etc/passwd 读取命令输出 使用getline,将外部...eg: seq 10 | awk '{printf "->%4s\n", $1}' 迭代文件中的行、单词和字符 迭代文件中的每一行 while 循环法 while read line; do echo
4、求b.txt和a.txt的差集 [hadoop@hadoop04 data]$ cat b.txt a.txt a.txt | sort | uniq -u 2.4、cut cut命令可以从一个文本文件或者文本流中提取文本列...-n:在显示匹配到的字符串前面加上行号。 -v:显示没有”搜索字符串”内容的那一行。 -l:列出文件内容中有搜索字符串的文件名称。 -o:只输出文件中匹配到的部分。...i:插入,在当前行前插入一行或多行。 p:打印,输出指定的行。 s:字符串替换,用一个字符串替换另外一个字符串。...sed -n '2,4p' huangbo.txt ## 打印输出huangbo.txt中的第2行和第4行 sed -n 's/hello/&-hi/gp' huangbo.txt sed 's/^192.168.0.1...hello开始的行之间的所有行。
导言 和上篇 awk 分享一样,作为通读性的分享,不想引入太过复杂的东西,依然从日常工作中碰到的 80% 的需求出发,重点阐述最重点的部门,工作原理等,普及一些对sed的意识,明白能帮我们解决哪些问题。...比如去掉html标签,提取有用信息; 1....,使用该参数,我们可以指定多个命令 -f 指定包含要执行的命令的脚本文件 2....从一个简单的替换开始 命令格式 [address1[,address2]]s/pattern/replacement/[flags] sed在匹配前可以指定针对哪些行,这些行的指定你可以直接使用数字,也可以通过匹配得到...输出多行中的第一行 P P命令用于输出N命令创建的多行文本的模式空间中的第一行,也就是说读进来两行,仅输出第一行。
NR:记录的行号 OFS:输出字段分隔符,默认值与输入字段分隔符一致。...ORS:输出记录分隔符(默认值是一个换行符) $n:当前记录的第n个字段,字段间由FS分隔 $0:完整的输入记录 ARGV:包含命令行参数的数组 ARGC:命令行参数的数目 基本用法 案例一...,n2 之间的行!...应用案例 grep "被查找的字符串" 文件名 grep test *file # 在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件 grep -v test *test*...#查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为 grep –e "正则表达式" 文件名 grep 除了可以查找单个文件中匹配的模式,也可以在目录中包含特定字符的文件查找匹配模式的行
-l:查询多文件时只输出包含匹配字符的文件名。 -n:显示匹配行及行号。 -s:不显示不存在或无匹配文本的错误信息。 -v:显示不包含匹配文本的所有行。...实例 $ ls -l | grep '^a' 通过管道过滤ls -l输出的内容,只显示以a开头的行。 $ grep 'test' d* 显示所有以d开头的文件中包含test的行。...保存已匹配的字符 1,20s/youyouself/\1r/ 标记元字符之间的模式,并将其保存为标签1,之后可以使用\1来引用它。最多可以定义9个标签,从左边开始编号,最左边的是第一个。...$ sed -n '5,/^test/p' example 打印从第五行开始到第一个包含以test开始的行之间的所有行。...IGNORECASE 如果为真,则进行忽略大小写的匹配。 NF 当前记录中的字段数。 NR 当前记录数。 OFMT 数字的输出格式(默认值是%.6g)。
例如: sed '2,5d' datafile #删除第二到第五行 sed '/My/,/You/d' datafile #删除包含"My"的行到包含"You"的行之间的行 sed '/My/,10d...input-file(s) 是待处理的文件。 在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。...数组 因为awk中数组的下标可以是数字和字母,数组的下标通常被称为关键字(key)。值和关键字都存储在内部的一张针对key/value应用hash的表格里。...-l:查询多文件时只输出包含匹配字符的文件名。 -n:显示匹配行及 行号。 -s:不显示不存在或无匹配文本的错误信息。 -v:显示不包含匹配文本的所有行。...#输出所有不包含48的行 (4)显示非匹配的行 grep -vn "48" data.doc #输出所有不包含48的行 (5)大小写敏感 grep -i "ab" data.doc
-w 匹配整个单词 -E 使用ERE,相当于egrep -F 相当于fgrep,不支持正则表达式 举例子: 1、查找文件内容包含root的行数 2、查找文件内容不包含root的行 3、查找以s开头的行...模式空间中匹配行取反处理 s///:查找替换,支持使用其它分隔符,s@@@,s### 替换标记: g 行内全局替换 p 显示替换成功的行 w /PATH/TO/SOMEFILE 将替换成功的行保存至文件中...举例子: 1、打印出文件第二行 2、打印出2-5行的内容 3、将文件中的root全部替换为abc 直接修改读取的文件内容,而不是输出到终端。...-v var=value 自定义变量 分割符、域和记录 awk执行时,由分隔符分隔的字段(域)标记1,1,2..n称为域标识,n称为域标识,0为所有域。...注意:以上都是内置变量,在引用时不需要前面加$,每新建一个变量,都需要加个-v,与变量名之间有无空格都可以,变量可以在引用之后再声明,但那一行的输出会输出空行。
OFS Output Field Separator 输出字段分隔符,(awk显示每一列的时候,每一列之间通过什么分割,默认是空格) awk -F: -v OFS=: '{print $NF,$2,...$3,$4,$5,$6,$1}' 文件名 4.3行与列 名词 awk中叫法 一些说明 行 记录record 每一行默认通过回车分割 列 字段域field 每一列默认通过空格分割 awk中行和列结束标记都是可以修改的...= 2)取列 -F 指定分隔符 指定每一列结束标记(默认是空格,连续的空格,tab键) $数字 取出某一列,注意:在awk中$内容一个意思 表示取出某一列 $0整行的内容, {print xxx}...pattern{action}' 1)比较表达式-参考上面取行部分 2)正则: 支持扩展正则 awk可以精确到某一列,某一行中包含/不包含.....内容。...~不包含 正则 awk正则 ^表示以....开头的行 某一列的开头 $3~/^oldoy/ $表示以.....结尾的行 某一列的结尾$4~/lidao$/ ^$表示空行 某一列是空的 很少用
第1章 awk命令基础 1.1 awk命令执行过程 1、如果BEGIN 区块存在,awk执行它指定的动作。 2、awk从输入文件中读取一行,称为一条输入记录。...sep NR 记录号 行号 number of record RS 每一行的分隔符(每一行的结束标记) $数字 取某一列 $0 取出这一行 1.4.1 $NF的使用 $NF 表示最后一列,(NF...号码 最后三列是三次捐款数量 1.5.2 显示出第二列中包含X 的。... gsub(r, s [, t]) r /找谁/ s "替换成什么" [] 替换那个部分的 表示为: gsub(/找谁/,"替换成什么",替换那个部分的) 1.7.2 替换文本中的内容...,在awk中不包含可以使用! 表示。 $NF 表示这个文件的最后一列 -F 将分隔符指定为: [root@znix ~]# awk -F: '$NF!
a.txt|awk '{print 1}'` md5_b=`grep -w "f" /tmp/md5_b.txt|awk '{print 1}'` #当文件存在时,如果md5值不一致则输出文件改变的结果...#容清空,但不删除文件,其他时间则只统计各个文件的大小,一个文件一行,输出到以时#间和日期命名的文件中,需要考虑目标目录下二级、三级等子目录的文件 ###########################...}'` sum=0 #文档中每一行可能存在空格,因此不能直接用文档内容进行遍历 for i in `seq 1n`do #输出的行用变量表示时,需要用双引号 line=`sed -n "i"p a.txt...line-numbers"># rename article bbs *.html 把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母 1)准备测试文件,文件名为2.txt 第1.../bin/bash ############################################################### 把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母
‘/xml/d’ a.txt删除所有包含xml的行 sed ‘/xml/!.../' a.txt 将文件中每行的第一个和第二个字符互换 sed -r 's/^(.)(.)(.*)/\2\1\3/' a.txt 将文件中每行的第一个和第二个单词互换 sed -r 's/([a-Z]+...修改网站根目录:将/var/www/html修改为/opt/wwwroot sed -ri 's#/var/www/html#/opt/wwwroot#' /etc/httpd/conf/httpd.conf...^192/' /etc/hosts seq 100 |awk 'NR%7==0||NR~/7/' 7的倍数或者包含7的数字 脚本示例:提取用户名和密码字段存储 #!...a[$0]++' filename a为数组名 $0为处理对象 表示要去除的是整行重复的内容,如果要去除的是字段重复的行,可以将$0改为$1 $2 提取测试文件:awk -F: '' /etc/passwd
sed、awk和grep都很适合用管道,特别是在简单的一行命令中。在下面的例子中, who命令的输出通过管道传递给awk命令,以便只显示用户名和所在的终端。...-l 查询多文件时只输出包含匹配字符的文件名。 -n 显示匹配行及行号。 -s 不显示不存在或无匹配文本的错误信息。 -v 显示不包含匹配文本的所有行。...Number 变量指定将多少单元写入标准输出。 Number 变量的值可以是正的或负的整数。如果值的前面有 +(加号),从文件开头指定的单元数开始将文件写到标准输出。...如果值的前面有 -(减号),则从文件末尾指定的单元数开始将文件写到标准输出。如果值前面没有 +(加号)或 -(减号),那么从文件末尾指定的单元号开始读取文件。...# 这样在输出的文本中每一行后面将有且只有一空行。
-5行 sed ‘/xml/d’ a.txt 删除所有包含xml的行 sed ‘/xml/!...[^a-Z]*)$/\1/' a.txt 将文件中每行的第一个和第二个字符互换 sed -r 's/^(.)(.)(.*)/\2\1\3/' a.txt 将文件中每行的第一个和第二个单词互换 sed -.../ifcfg-eth0 修改网站根目录:将/var/www/html修改为/opt/wwwroot sed -ri 's#/var/www/html#/opt/wwwroot#' /etc/httpd/...7==0||NR~/7/{print}' 7的倍数或者包含7的数字 脚本示例:提取用户名和密码字段存储 #!...a[$0]++' filename a为数组名 $0为处理对象 表示要去除的是整行重复的内容,如果要去除的是字段重复的行,可以将$0改为$1 $2 提取测试文件:awk -F: '{print $7}'
_a.txt|awk '{print 1}'`md5_b=`grep -w "$f" /tmp/md5_b.txt|awk '{print 1}'`#当文件存在时,如果md5值不一致则输出文件改变的结果...#容清空,但不删除文件,其他时间则只统计各个文件的大小,一个文件一行,输出到以时#间和日期命名的文件中,需要考虑目标目录下二级、三级等子目录的文件############################...=#文档中每一行可能存在空格,因此不能直接用文档内容进行遍历for i in `seq 1 $n`do#输出的行用变量表示时,需要用双引号line=`sed -n "$i"p a.txt`#wc -L选项...-maxdepth 1 -name "*html"); do mv $file bbs_${file#*_}done方法3: # rename article bbs *.html 把一个文档前五行中包含字母的行删掉.../bin/bash###############################################################把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母
" /tmp/md5_a.txt|awk '{print 1}'` md5_b=`grep -w "$f" /tmp/md5_b.txt|awk '{print 1}'` #当文件存在时,如果md5值不一致则输出文件改变的结果...#容清空,但不删除文件,其他时间则只统计各个文件的大小,一个文件一行,输出到以时#间和日期命名的文件中,需要考虑目标目录下二级、三级等子目录的文件 ###########################...}'` sum=0 #文档中每一行可能存在空格,因此不能直接用文档内容进行遍历 for i in `seq 1 $n`do #输出的行用变量表示时,需要用双引号 line=`sed -n "$i"p a.txt...-maxdepth 1 -name "*html"); do mv $file bbs_${file#*_}done 方法3: # rename article bbs *.html 把一个文档前五行中包含字母的行删掉.../bin/bash ############################################################### 把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母
#容清空,但不删除文件,其他时间则只统计各个文件的大小,一个文件一行,输出到以时#间和日期命名的文件中,需要考虑目标目录下二级、三级等子目录的文件 #########################...'{print $1}'` sum=0 #文档中每一行可能存在空格,因此不能直接用文档内容进行遍历 for i in `seq 1 $n`do #输出的行用变量表示时,需要用双引号...把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母 1)准备测试文件,文件名为2.txt 第1行1234567不包含字母 第2行56789BBBBBB.../bin/bash ############################################################### 把一个文档前五行中包含字母的行删掉,同时删除6...,可将输出结果写入临时文件中,再替换2.txt或者使用-i选项 10、统计当前目录中以.html结尾的文件总大 方法1: # find .
sed命令是一个处理行文本的编辑器,'s/^ *//g'是一个正则表达式(^和*之间有一个空格),表示将行首的连续空格替换为空(即删除)。接着,将排序结果重定向到文件www-01.result。...为了简洁,上面的例子每一组只包含两条记录,实际上每一组都包含31条记录(分别代表当月每天的访问次数)。 (9)log.awk脚本 为了将31天的访问次数加总,我动了很多脑筋。...=0){ #判断是否为奇数字段 sum += $i #如果是的话,累加这些字段的值 } } print sum,$2 #输出总和,后面跟上对应的网址...由于输入文件之中,每一行都包含两个字段,第一个是访问数,第二个是网址,所以这里做一个条件判断,只要是奇数字段就累加,偶数字段则一律跳过。最后,每个记录输出一个累加值和网址,它们之间用空格分割。...#输出一行字,表示开始处理当前文件 awk '$9 == 200 {print $7}' $i|grep -i '^/blog/2011/.*\.html$'|sort|uniq -c|sed
领取专属 10元无门槛券
手把手带您无忧上云