diff/sort/uniq/awk/vi

从windows上传文件到linux,去除^M字符,sed -e ‘s/^M/\n/g’filename

sort:
	sort -rg -t \t -k 7 4247779962374195861.txt
	-g 按自然文本排序
	-t 分隔符
	-k 根据第几列排序
	-r (默认从大到小排序,加-r表示小到大排)
	-u 去重排序 (sort fname|uniq == sort -u fname)
	sort -rg -t \t -k 7 total_result.csv > total_result.csv.sorted
	sort -rg -t \t -k 7 total_result.csv.bak > total_result.csv.bak.sorted 

diff:
	diff total_result.csv.sorted total_result.csv.bak.sorted > total_result.diff

uniq:
	-c 在目标文本的第一行显示该行内容出现的次数,用" "分割
	-d 显示重复出现过的行
	-u 显示只出现一次的行  

awk:
	#awk处理多个文件:
		awk 'NR==FNR {a[$0]} NR>FNR&&!($0 in a) {print $0}' fa fb	
		awk -F "," '{if(ARGIND==1){f[$8]=1}else{if(!($8 in f)){print $0}}}' ../src_data/total_result.csv.bak ./inAoi_poiinfos > ./has_ps_before
		
	#awk多字符分割,以及正则表达式匹配
		awk -F"\",\"" '$13~/match_online/ && $23!~/d/ && $25!~/1/ && (0 + $14) < 100 {print }'
	
	#awk的gsub函数实现字符串的替换
		echo abc\",\"abcd |awk -F \",\" '{oriname=$1;shortname=$2;gsub(oriname,"",shortname);print shortname}'

vi模式:
	1. 插入模式

	2.命令模式:(命令中有字母的话,必须确保是英文输入法,要不然会怀疑人生)
		查找单词:
			光标移动至需查找的单词--》shift+3-->n/shift+n在查出的单词之间跳转  		
		进入插入模式:
			a :在光标后开始插入
			A :在行尾开始插入
			i :从光标所在位置前面开始插入
			I :从光标所在列的第一个非空白字符前面开始插入
			o :在光标所在列下新增一列并进入输入模式
			O :在光标所在列上方新增一列并进入输入模式		
		光标移动:
			光标换行移动:
				换屏移动:
					C-b      向上滚动一屏
					C-f      向下滚动一屏
					C-u      向上滚动半屏
					C-d      向下滚动半屏
					C-y      向上滚动一行
					C-e      向下滚动一行
				换行移动:
					文件首尾移动:
						G:光标移至最后一行
						gg:光标移动至第一行
					同页首位移动:
						H  :光标移至屏幕顶行
						M  :光标移至屏幕中间行
						L  :光标移至屏幕最后行
					多行跳跃移动:
						nG:光标移至第n行首
						n+ --》enter:光标下移n行
						n- --》enter:光标上移n行
				同行移动:
					首尾跳跃移动:
						0  :光标移动至行首(物理意义的行首)
						shift+6(注意必须是英文输入法):将光标移动到该行第一个字符处
						shift+4(注意必须是英文输入法):将光标移动到该行最后
					单词跳跃移动:
						w  :向前移动一个单词,将符号或标点当作单词处理
						W  :向前移动一个单词,不把符号或标点当作单词处理
						b  :向后移动一个单词,把符号或标点当作单词处理
						B  :向后移动一个单词,不把符号或标点当作单词处理
					字符跳跃移动:
						h  :光标左移一格
						l  :光标右移一格
						j  :光标下移一行
						k  :光标上移一行
		复制/粘贴:
			yy: 复制当前行
			yw: 复制一个单词
			y$: 复制光标到结尾(包含光标)
			y^: 复制行首到光标(不包含光标)
			nyy: 复制n行
			nyw: 复制n个单词
			m,ny复制m到n行内容。
			
			p: 粘贴在光标后(不包含光标),如果是整行,这粘贴在光标下一行。
			P: 粘贴在光标前(不包含光标),如果是整行,这粘贴在光标上一行。
		删除:
			d^:删除从行首到当前光标所在位置的内容。
			d$:删除从当前光标所在位置到行末的内容。
			dw:删除从当前光标所在位置到字末的内容。
			3dd:从当前光标所在位置向下删除3行。
	
	3.末行模式:
		vi查找:
			/需查找单词-->n/shift+n在查出的单词之间跳转
		
		vi文本替换:
			:s/old/new  (把当前行第一次出现的old字符串替换成new字符串)
			:s/old/new/g (把当前行出现的所有old字符串替换陈gnew字符串)
			:%s/old/new/g (把文件中出现的所有old字符串替换陈gnew字符串)
			:10,20s/old/new/g (把文件中第10到20行出现的所有old字符串替换陈new字符串)

		vi文本多行移动、复制添加、删除:
			:n1,n2 m n3       移动n1-n2行(包括n1,n2)到n3行之下;
			:n1,n2 co n3      复制n1-n2行(包括n1,n2)到n3行之下;
			:n1,n2 d          删除n1-n2行(包括n1,n2)行;
			:1,$y 复制全部字符

		vi多行文本缩进:
			:set sw = 4 设置每次缩进的空格数
			:1,10>> 1->10行向后缩进一个word space
			:1,10<< 1->10行向前缩进一个word space 

shell 整型变量自增(加1)的几种方法
	#!/bin/sh

	a=1
	a=$(($a+1))
	a=$[$a+1]
	a=`expr $a + 1`
	let a++
	let a+=1

	((a++))

	echo $a

整数运算
article_num=$[$num * 20 /100]; #`echo "num*0.2"|bc`;

浮点数运算
activity_num=`echo "scale=2;$num*0.01"|bc`;



当你 exit 0 的时候,在调用环境 echo $? 就返回0,也就是说调用环境就认为你的这个程序执行正确
当你 exit 1 的时候,一般是出错定义这个1,也可以是其他数字,很多系统程序这个错误编号是有约定的含义的。 
但不为0 就表示程序运行出错。 调用环境就可以根据这个返回值判断 你这个程序运行是否ok。


引用配置文件:. $path/file 不支持正则表达式如 *或者 *.*

得到时间格式字符串
$`date +%Y%m%d%H%M%S`
20161016021612

shell用变量的值作为新的变量名
str=java
java_new="wo xiang yao de"

tmp=${str}_new
dest=`eval echo '$'$tmp`
echo ${dest} #wo xiang yao de

shell:数组
	ip=(ip1 ip2 ip3)  //数组
	for i in ${ip[@]}  //数组
	do
		echo ssh root@ $i
	done

shell:关联数组

	declare -A a        # 声明关联数组(必须有此句)
	a=(["apple"]="a1" ["banana"]="b2" ["carrot"]="c3")   # 初始化关联数组
	echo ${#a[*]}       # 获取元素个数
	echo ${a["carrot"]} # 获取元素值  
	a["durian"]="d4"    # 插入或修改元素
	echo ${!a[*]}       # 获取所有的key
	unset a["banana"]   # 删除元素

	# 遍历数组(仅value)
	for i in ${a[*]}
	do
		echo ${i}
	done

	# 遍历数组(key和value)
	for key in ${!a[*]}
	do
		echo "${key} ==> ${a[${key}]}"
	done
	unset a     # 清空数组

给你几个题,抽时间做一下,不会的百度,,
就掌握linux文本处理的常用方式了,,
需要写shell代码
0. 一个文件aaa.txt有100000数据,
需求:
把aaa.txt中的数据倒序输出到bbb.txt

1. 前提条件:
dir下有文件,也有文件夹,
并且所有的文件里的数据,字符串之间是用制表符\t分割,


需求:
1.1把dir下所有的文件里的abc替换成cba
1.2把dir下所有的文件里的第二列中包含的abc,替换成cba

2. 有两个文件111.txt,222.txt 
分别有三个字段id、name、desc 三个字段之间用制表符\t分割,
需求:
2.1 把111.txt中有,222.txt中没有的内容输出到333.txt,
2.2 把222.txt中的内容添加到111.txt后,并输出到444.txt
2.2 把111.txt,222.txt中共有的内容输出到555.txt

3. 一个文件中有三列数据,每列之间用制表符\t分割,
第二列表示用户名,有重复
需求:
3.1 输出文件中出现过的所有的用户名(一个用户名输出一次)





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值