从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 输出文件中出现过的所有的用户名(一个用户名输出一次)
diff/sort/uniq/awk/vi
最新推荐文章于 2021-07-06 12:05:22 发布