Makefile和linux命令总结| 青训营笔记

135 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第8天

在接触大数据应用环境部署和代码调试时,了解并总结了简单的Makefile写法和linux命令。

文件名:M(m)akefile 【文本文件】
​
target(目标文件,你要编译成什么东西):dependencies(文件依赖,这个目标依赖什么东西)
​
【tab】 command
​
eg. test : test.c
​
gcc test.c -o test
​
运行:输入make即可
​
Makefile实现对子文件夹和子文件的操作:
​
方法1: 
​
fibo: code/main.o code/fibo.o
    gcc -o fibo code/main.o code/fibo.o 
 
code/fibo.o: code/fibo.c
    gcc -c code/fibo.c -o code/fibo.o  -I ./include
 
code/main.o: code/main.c
    gcc -c code/main.c -o code/main.o -I ./include
 
clean:
    find . -name '*.o' -type f -print -exec rm -rf {} ;
方法2:外层的Makefile调用内层的Makefile
​
#内层
fibo: main.c fibo.c
    gcc fibo.c -c -o fibo.o -I ../include/
    gcc main.c -c -o main.o -I ../include/
    gcc -o ../fibo main.o fibo.o -I ../include/
#外层
fibo: 
    cd ./code && make fibo
clean:
    find . -name '*.o' -type f -print -exec rm -rf {} ;
 
apple.txt:文件名
 
awk '{print}' apple.txt :打印全部内容,等价于cat apple.txt
awk '{print $n}' apple.txt :打印第n列内容
awk '{print $1,$2,$3}' apple.txt :打印第1,2,3列内容
NR(number of record) 行号 横行:record 竖行:field(NF) 【内部变量】
awk '{print NR "\t" $1 "\t" $2 "\t" $3}' apple.txt :打印行号+第1,2,3列内容,用制表符分割
awk '{print NF "\t" $0 }' apple.txt :统计每一行有多少列(默认以空格分割)
$0: 整一行全部打出来
awk默认视在{}中的空格为连接左右两个字符串,需要额外用" , " 作为打印东西的分隔符。(awk默认为空格)当然也可以像"\t"一样使用自定义分隔符。
awk '$3==1986{print $0}' apple.txt :只要第三列是1986的就输出出来
awk '$3=="gold"{print $0}' apple.txt :只要第一列是gold的就输出出来
awk 'NR==7{print $0}' apple.txt :打印第7行
awk 'NF==7{print $0}' apple.txt :打印有7段的行
awk '{print $1,$2,$3}' :如果不打文件名,awk等待从键盘输入文件
awk 'BEGIN{FS=","} {print $1,$2}' :把当前分隔符改为逗号 【FS 内部变量】
awk 'BEGIN{OFS=","} {print $1,$2}' :把当前输出分隔符改为逗号
awk 'BEGIN{FS="," ; OFS=","} {print $1,$2}' :同时修改,分号代表换一行
awk '{print NR, $0}' apple.txt , data.txt:两个文件,自动拼接在后面,会添加行号
awk '{print NR,FILENAME, $0}' apple.txt , data.txt     【FILENAME 内部变量】
awk '{$3="xxxx"; print  $0}' apple.txt :将第三列都替换成了xxxx
awk '{ print  $NF}' apple.txt :打出最后一列,因为NF是每一行有多少列
awk '{ print  $(NF-1)}' apple.txt :打出每一行的倒数第二列,因为NF是每一行有多少列
正则表达式(Regular Expression):
 
awk中:/正则表达式/
awk '/abc/{print  $0}'  data.txt:将data.txt中所有符合/abc/的一整行全部打出来
:转义字符
[^a-z]非a-z
GREP COMMAND:
grep en data.txt: 包含en的全部打印出来 (en-正则)
grep ^H data.txt