ICONV----一个简单的文本编码格式转换程序
目前的大部分文档都是utf-8编码,如下命令可以查看帮助
iconv --help ,详细参数help都会列出来
例如:
iconv -f ISO-8859-1 -t UTF-8 < input.txt > output.txt
HEAD---命令,查看文件是什么,而不需要打开整个文件,如果文件很大,就会很慢而且浪费资源,而对于数据的科学计算往往数据量是很大的
$ head --help
head: illegal option -- -
usage: head [-n lines | -c bytes] [file ...]
head -n 输出指定行;head -c 输出指定的字节
TR---命令,可以理解为一个翻译命令,就是吧文本中的特定字符翻译成另一个特定字符;
#将文件中的制表符分割转换成逗号
cat tab_delimited.txt | tr " " "," >comma_delimited.csv
# 将所有的大写字母转换成小写
cat filename.csv | tr '[A-Z]' '[a-z]'
wc 命令查看行数,字节数等
wc -l 打印行数
wc -c 打印字节数
wc -m 打印字符数
wc -L 打印最长一行的长度
wc -w 打印字数
SPLIT命令 拆分文件,
基本用法
#我们拆分这个CSV文件,每500行分割为一个新的文件new_filename
split -l 500 filename.csv new_filename_
# filename.csv
# ls output
# new_filename_aaa
# new_filename_aab
# new_filename_aac
通过find 命令来重命名
find . -type f -exec mv '{}' '{}'.csv ;
# ls output
# filename.csv.csv
# new_filename_aaa.csv
# new_filename_aab.csv
# new_filename_aac.csv
其他参数
split -b按特定字节大小拆分
split -a生成长度为N的后缀
split -x使用十六进制后缀分割
SORT & UNIQ
前面的命令是显而易见的:他们按照自己说的做。这两者提供了最重要的一击(即去重单词计数)。这是由于有uniq,它只处理重复的相邻行。因此在管道输出之前进行排序。一个有趣的事情是,sort -u将获得与sort file.txt | uniq相同的结果。
Sort确实对数据科学家来说是一种很有用的小技巧:能够根据特定的列对整个CSV进行排序。
# Sorting a CSV file by the second column alphabetically
sort-t","-k2,2filename.csv
# Numerically
sort-t","-k2n,2filename.csv
# Reverse order
sort-t","-k2nr,2filename.csv
这里的-t选项是指定逗号作为分隔符。通常假设是空格或制表符。此外,-k标志是用来指定我们的键的。它的语法是-km,n,m是起始字段,n是最后一个字段。
sort -f 忽略大小写
sort -r 逆序
sort -R 乱序
uniq -c 计算出现次数
uniq -d 只打印重复行
SED
在内核中sed是一个流编辑器。它擅长替换,但是也可以用来重构。
最基本的sed命令包含了s/old/new/g。也就是全局搜索旧值,替换新值。没有/g 我们的命令可能在第一次出现旧值就会终止。
为了尽快了解它的能力,我们来看一个例子。在这个情况你会拿到下面的文件:
balance,name
$1,000,john
$2,000,jack
我们要做的第一件事就是移除美元符。-i 标识表示就地修改。''就是代表一个零长度文件扩展,因此重写我们的初始文件。理想情况下,你会单独测试这些并输出到一个新文件。
sed-i'''s/$//g'data.txt
# balance,name
# 1,000,john
# 2,000,jack
下一步,我们的balance列的逗号。
sed-i'''s/([0-9]),([0-9])//g'data.txt
# balance,name
# 1000,john
# 2000,jack
最终,Jack有一天起来并准备辞职了。所以,再见吧,我的朋友。
sed-i'''/jack/d'data.txt
# balance,name
# 1000,john
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h或--help 显示帮助。
-n或--quiet或--silent 仅显示script处理后的结果。
-V或--version 显示版本信息。
p==print
d:delete
=:打印匹配行的行号
-n 取消默认的完整输出,只要需要的
-e 允许多项编辑
-i 修改文件内容
-r 不需要转义
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
g :在行内进行全局替换
AWK
Awk不仅是一个简单的命令:它是一个成熟的语言。在本文中包含的每一个命令中,awk目前是最酷的。
用法多种多样,有兴趣的可以自己深入研究一下
如awk包含的常用案例:
文本处理
格式化文本报告
执行计算操作
执行字符串操作
Awk在其最初雏形可以与grep平行。
awk'/word/'filename.csv
或者多使用一点魔法,让grep和cut结合。在这,awk对所有行通过word打印了以tab分隔的第三和第四列。-F,只是将分隔符变为逗号。
awk-F,'/word/ { print$3""$4}'filename.csv
Awk具有大量有用的内置变量。例如, NF -字段数 - 和NR - 记录数。为了获取文件中这53个记录:
awk-F,'NR == 53'filename.csv
添加一个小窍门可以基于一个值或者多个值过滤。下面的第一个例子,会打印这些记录中第一列为string的行数和列。
awk-F,'$1== "string" { print NR,$0} 'filename.csv
# Filter based off of numerical value in second column
awk -F,'$2== 1000 { print NR,$0} 'filename.csv
多数值表达式:
# Print line number and columns where column three greater
# than 2005 and column five less than one thousand
awk-F,'$3>= 2005 &&$5<= 1000 { print NR,$0} 'filename.csv
计算第三列之和:
awk-F,'{ x+=$3} END { print x }'filename.csv
计算那些第一列值为“something”的第三列之和。
awk-F,'$1== "something" { x+=$3} END { print x }'filename.csv
获取文件的行数列数:
awk -F, 'END{ print NF, NR }' filename.csv
# Prettier version
awk -F, '
BEGIN{ print"COLUMNS","ROWS"};END{ print NF, NR }' filename.csv
打印出现过两次的行:
awk-F,'++seen[$0] == 2'filename.csv
awk用法功能多种多样,我这也只是学了皮毛,自己常用的几个,
更多的需要我们自己去发觉