SMPCUP2017_linux_cmd
来源:互联网 发布:数据库表主键的作用 编辑:程序博客网 时间:2024/05/16 04:25
SMPCUP2017—Linux命令
流重定向命令
>
和>>
,前者是覆盖,后者是追加假如有名为helloworld.py的python script
#!/bin/python3# -*- coding: UTF-8 -*-print('Hello,world!')
和普通文本文件123.txt
this is 123.txt
在终端命令行中运行
./helloworld.py
,会在终端中输出 Hello,world!
当想要将输入写入文件时,就可以用重定向命令:./helloworld.py > 123.txt
,然后123.txt的内容变成下面这样Hello,world!
./helloworld.py >> 123.txt
然后123.txt的内容变成this is 123.txtHello,world!
查找命令find
find /home -name hello* # 查找home目录下文件名或目录为hello的find / -name h?m* # 查找根目录下h开头 第二个字符任意 第三个字符是m 后面是任意字符 的文件或目录find / -size +1000000k # 查找根目录下文件容量大于1000000k的文件
一般情况会用find查找某个文件就行,更多用法详见
man find
sed -n '1,100p' file1 > newfile
输出文件file1的第1~100行,并将结果定向到文件newfile (也就将file1的1~100行提取到newfile里)
sed的命令选项 ‘p’—打印 可以用来分隔大的文本文件。是按行分隔的。
cat file1 | grep regex
cat输出文件file1的内容,grep选取匹配正则表达式regex的所有行
grep -a
处理二进制文件。本次比赛选取blogs时会遇到’Binary file matches’的报错,加上-a即可解决grep -n
可以列出行号grep -w
精确匹配。比如我们想选取文件中开头包含数字’152’的行,如果只用grep ‘152’,就会
把开头是11152/15277/15288等所有包含152的选出来, 改成grep -w ‘152’后,就只会选取是’152’的,
不会出现’11152’这种的,再改成grep -w ^’152’ 就是只选去行开头是’152’的行
sort file1
和uniq file1
sort可以用来对文件排序。
sort -k 2 -t ' '
以空格为分隔符,以第二列为基准,对文件排序sort -r
默认是升序排序,加上-r选项是降序排序
uniq用来对文件去重。
awk
cat file1 | awk '{print $2}'
输出文件file1的第二列。要求文件内容每行有相同分隔符。cat file1 | awk -F ' ' '{print $2}'
以空格为分隔符提取出文件的第二列。cat ccc.txt | awk '{for(i=1;i<=78;i++) if(条件) {printf$i" "; if(条件) printf"";}}'
awk亦是一门编程语言,语法类似于C,相比于其他命令有更强大的处理能力。paste
paste -d ' ' file1 file2
将文件file1和file2 以空格为分隔符 横向拼接起来 (’-d’选项可指定分隔符,默认是制表符)cat file2 >> file1
将file2的内容贴到file1后面,即实现纵向拼接。 (重定向一定要用’>>’,用’>’会覆盖了file1的内容)bash script
bash脚本约等于一堆命令的组合+程序语句
#!/bin/bash:<<BLOCK# 找发博客的记录FILENAME=(../../../SMPCUP2017ValidationSet/SMPCUP2017_ValidationSet_Task02_transencoding.txt)while read LINEdoif cat /mnt/windows_G/DataMining/SMPCUP2017DATACorpus/2_Post.txt | grep -a ${LINE} >> Task02_Validation_user_Post.txtthenecho "Find:"${LINE}fidone < $FILENAMEBLOCK:<<BLOCK# 提取出发的博客FILENAME=(temp2.txt)while read LINEdouid=${LINE:0:8}did=${LINE:9:8}if doc=`cat ../../../BlogContent_100k_split/Blog04.txt | grep -a $did`thenecho "Find:"${did}echo ${uid} ${doc} >> Task02_Validation_Post_blogs.txtelseecho ${LINE} >> temp3.txtfidone < ${FILENAME}BLOCK# 将每个用户各自发的博客写在一起# 这块功能理论上在上一块注释中可以直接实现FILENAME1=(../../../SMPCUP2017ValidationSet/SMPCUP2017_ValidationSet_Task02_transencoding.txt)while read LINE1dotouch ./Validation_each_user_Post_blogs/${LINE1:0:8}_post_blogs.txtdone < ${FILENAME1}FILENAME=(Task02_Validation_Post_blogs_sort.txt)while read LINEdouid=${LINE:0:8}doc=${LINE:18}echo ${doc} >> ./Validation_each_user_Post_blogs/${uid}_post_blogs.txtdone < ${FILENAME}echo $SECONDS
- 开头的
#!/bin/bash
指定用哪个解释器执行脚本 - bash中单引号中的字符串相当于python中的raw string,即所有字符都是原义,
双引号中才可以有转义字符;单引号中不可以转义单引号 - FILENAME存放文件名的变量,只存放一个文件名的话,用圆括号/单双引号都行
- 对变量的赋值可以直接进行,使用变量要加’$’。比如: LINE=’U0002100’是赋值,
想要使用变量 输出LINE, 就是echo ${LINE}
。
使用变量时加上’{}’花括号是个好习惯。
${LINE:1:5} 表示对变量LINE,从下标1开始,取五个字符,即’00021’ - bash中进行文件的读取,也是本次比赛中常用的操作
bash
# 釜底抽薪式的while读取文件
FILENAME=()
while read LINE # read还可以用于读取标准输入,类似python的input()
do
echo ${LINE} # 输出每一行
done < ${FILENAME} - if statements
bash
if conditions
then
action1
action2
else
action3
fi
bash中的if语句,else后面为空的话,就不要写else,结束用if的倒写fi。
若conditions执行成功,则执行then后面的语句。
每条命令执行完后都有返回码($?),可以用echo $?
来查看上条命令执行后的结果,返回码为0
则表示执行成功
如上面大段代码块中的if cat file | grep -a regex >> file2
,只有找到regex匹配的行并写入file2,这条cat语句的返回码才为0,
如果没找到匹配的行,那返回码就不为0
bash中if语句的条件有多种形式,和其他语言的表示不太一样,具体用时请多查看资料
- 开头的
©Liberty
- SMPCUP2017_linux_cmd
- windows用Chrome浏览器访问Centos7虚拟机中django项目执行结果
- FTPrep, 4 Median of Two Sorted Arrays
- Bootstrap学习心得
- ARC 059F バイナリハック DP
- [LeetCode] 328. Odd Even Linked List
- SMPCUP2017_linux_cmd
- 嵌入式系统入门及一些逻辑解析
- 华为OJ——迷宫问题
- Google IORedux 回忆
- Android——聊天布局Adapter的简单实现
- C++每日一课(十五)
- mongodb笔记——查询
- 在设备管理器中注册自己的设备
- window-anaconda-theano-keras安装