guodongxiaren / linuxtool Goto Github PK
View Code? Open in Web Editor NEWLinux下常用工具、命令介绍,跟我学Linux
Linux下常用工具、命令介绍,跟我学Linux
sed 's/,/\n/g' a.txt > b.txt
awk -F',' '{ for( i=1; i<=NF; i++ ) print $i }' a.txt > b.txt
cat data|awk '{sum+=$1} END {print "Sum = ", sum}'
cat data|awk '{sum+=$1} END {print "Average = ", sum/NR}'
cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1 } END {print "Max=", max}'
awk 'BEGIN {min = 1999999} {if ($1<min) min=$1} END {print "Min=", min}'
sed -i '$d' abc.txt
注意 $d 要用引号套起来。
20190523 0点的上一个小时!
date +'%Y%m%d%H' -d "20190523 00 -1 hours"
注意:20190523 00 有个空格。 左边的format只是输出的格式。不是输入的格式。
awk '!x[$0]++' file.txt
sort -m <(sort file1 | uniq) <(sort file2 | uniq) | uniq
sort -m <(sort file1 | uniq) <(sort file2 | uniq) | uniq -d
sort -m <(sort file1 | uniq) <(sort file2 | uniq) <(sort file2 | uniq) | uniq -u
一个CSV文件TAB分割,假设名为data.txt,第二列是userid。
另外有一个文件是userid的文件,假设名为userid.txt。每一行都是一个userid。
过滤data.txt,找到userid.txt中的userid的数据来输出。
awk -F "\t" 'BEGIN{while(getline<"userid.txt") a[$1]=1;} {if(a[$2]==1) print $0;}' data.txt >
new_data.txt
BEGIN是在awk循环解析之前都初始化阶段。
a[$1]=1
建立关联数组,userid.txt里的每个userid为key,value为1。
find . -regex '..cpp|..h|..hpp|..cc'
find . -regex '..cpp|..h|..hpp|..cc'|xargs tar zcvpf code.tar.gz
原始文件 stu.txt:
姓名 年龄 身高 体重 学校
小明 20 170 180 北大
小红 22 155 80 清华
小强 23 175 140 北
第一行是标题
编写脚本 md_table.sh
# 替换TAB为|
sed -i 's/\t/|/g' $1
# 每行前追加|
sed -i 's/^/|/g' $1
# 第二行追加md表格分隔行
sed -i '2 i|---|---|---|---|---|' $1
执行脚本:
sh md_table.sh stu.txt
替换:
姓名 | 年龄 | 身高 | 体重 | 学校 |
---|---|---|---|---|
小明 | 20 | 170 | 180 | 北大 |
小红 | 22 | 155 | 80 | 清华 |
小强 | 23 | 175 | 140 | 北 |
cat的合并是上下合并。现在我们想左右合并两个文件。
num.txt
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
alpah.txt
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
abc,def,ghi
我们在进行项目详细设计的时候,通常会写数据库设计文档,即用在word文档中插入一个表格描述字段名,类型,描述等信息。
我们将表格复制到excel,调整列的顺序使之只剩下两列。字段名,后面是类型。然后选中两列cat > 到一个文件里,文件内容形如:
id int
name varchar(20)
sex int
school varchar(20)
create_time datetime
modify_time datetime
github在fork之后,你的repo如何同原repo同步呢?
主要就是给你的repo再添加一个remote,指向原repo。接着从这个remote更新就行了。注意如果和本地repo有冲突可能产生merge。你也可以给本地开个新branch跟进。
git remote -v
remote名任意,这里我叫root吧。指向原repo
git remote add root [email protected]:ma6174/vim.git
git fetch root
如果你已经是master忽略这步。
git checkout master
git merge root/master
git push
day=${1:-`date -d "1 day ago" +%Y%m%d`}
一行代码实现
Mac上的很多命令太不友好啦
brew install gnu-sed --with-default-names
配置别名:
alias sed='/usr/local/Cellar/gnu-sed/4.2.2/bin/sed'
旧的GitHub Markdown的语法里面标题#和文本之间是不需要加空格的。
比如#标题名
但是后来经过一次升级,这个语法就不能用了。一定要加空格才行,即# 标题名
。
但是很多旧的Markdown改起来太麻烦了,当时我也苦于无果,见 #3
后面发现其实sed 强大的匹配替换功能就可以胜任。写法如下:
sed -i 's/\(.*\)#\(.*\)/\1# \2/' xxx.md
mac上面sed -i要多加个参数空字符串
sed -i '' 's/\(.*\)#\(.*\)/\1# \2/' xxx.md
否则报错:extra characters at the end of p command
https://github.com/guodongxiaren/LinuxTool/blob/master/%E8%BF%87%E6%BB%A4%E5%99%A8/README.md
里面
-d
uniq -d去除重复行。
同样要记得和sort联用。
这个描述有问题
‘-d’
‘--repeated’
Discard lines that are not repeated. When used by itself, this option causes uniq to print the first copy of each repeated line, and nothing else.
不是去除重复行啊。。 是去除不重复的行,留下重复的。这里重复的定义还是相邻的行
由于这个repo的主要写作时间是2014-2015,当时的Markdown语法和如今有区别。比如之前标题的语法#和标题名称之间是不需要空格的,如今强制需要空格。导致当时写的这个repo中的标题基本不能用了。谁有时间帮忙重构下?
比如一个文件是\t 分隔的数据文件,要删除它的第5列:
awk -F'\t' '{$5=null;print $0}' src.txt > dst.txt
但这个有个问题就是分隔符变了,变成空格了
可以用sed替换回来
grep -o word log.txt|wc -l
注意 -o选项,不加的话,只能得到匹配行数,一行出现多个单词word会只算一次。
wget 直接下载网络上的目录,会有问题。要加一堆参数,备忘:
wget -c -r -np -k -L -p http://docs.openstack.org/liberty/install-guide-rdo/
会把目录中所有的文件下载下来。
有一个trace.log
cost:1 uid:abc
cost:3 uid:sdc
cost:5 uid:gde
cost:3 uid:bbt
cost:2 uid:aac
提取出所有的cost的数值。可供后续统计分析均值、99分位、最大最小等等。如果是统计uid可以方便捞出每个用户某时间段内的访问次数。
总之这种操作是高频操作!
形如:
<![CDATA[http://abc.xml]]>xxxx<![CDATA[http://abc.xml]]>sdlfsjdos<![CDATA[http://abc.xml]]>12456
比如一个\t分隔的CSV文件。我想过滤出它第4列为1或2的数据行。
这次我们用点稍微高级的awk语法。不要把awk视作命令,它是 脚本!。
awk -F'\t' '{if ($4 == "1" || $4 == "1") print $1}' data.txt > new_data.txt
/
和?
我们都知道的 /
和?
gg
/hello
G
?world
一个从上到下查找hello,一个从下到上查找world
某一次我脚本生成的一个README.md文件,缺失了换行符。比如:
茶
拥有 1 位优秀回答者:
谢伟文
这会导致显示的时候,这两行是挤在一行的。我想在有几位优秀回答者这行后面加一个空行。
在vim里面用:s /:\n/:\n\n/g
无效……
sed -i '$a\要插入的文字' file.name
date命令可以展示纳秒(用%N)
1000纳秒=1微秒
date +"%T.%N"
显示:
22:33:00.921842596
保留前三位即为毫秒,保留前三位即为微秒
date +"%T.%3N"
显示:
22:33:00.921
python的日志字符串中没有%N。用%f获取毫秒时间
大文件中复制某一行。我们当然可以用vim打开,然后用鼠标进行选择复制。但是有时候那一行会很长,导致换了多行,鼠标复制会稍显麻烦。其实awk很方便可以实现。
awk 'NR=15000' a.txt
即输出a.txt的第15000行(从1计数)
单行大文件(无换行符)。用vim打开会加载很久。直接cat,head由于单行,终端hold不住。
请求怎么查看文件的前10个或末尾10个字符?
这个就需要grep的ABC选项了。每个选项后面都跟数字,表示的是行数。
也就是说C包含了AB的功能,比如:
grep xxx -C 5 a.txt
查询a.txt中xxx出现的位置以及它所在行的前后5行
awk 'NR==10' trace.log
awk 'NR >= 2 && NR <= 4' trace.log
删除文件中第一列
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
cat data.txt|awk -F, 'BEGIN{OFS=","}{$1=NULL;print $2,$3}'
优点是简单,容易想到。缺点是如果列很多就要一一枚举。
也可以这样:
cat data.txt|awk -F, 'BEGIN{OFS=","}{$1="";print $0}'
cat data.txt|awk -F, 'BEGIN{OFS=","}{$1=NULL;print $0}'
但是这样,会保留分隔符。变成:
,456,789
,456,789
,456,789
,456,789
,456,789
,456,789
,456,789
,456,789
,456,789
,456,789
,456,789
,456,789
可以再搭配一个删除首行字符的操作:
cat data.txt|awk -F, 'BEGIN{OFS=","}{$1="";print $0}'|sed 's/^.//'
如果想删开头两个字符可以用:
sed 's/^..//'
两个点。
sort -t '.' -k1nr
t:指定分隔符。
k1:按照第一列排序
n:按照数字顺序,而非字典序。避免把1和11,12排到一起
r:逆序
过滤器/README.md 中wc命令解释有问题
常用选项 描述 l 只统计行数 w 只统计单词数 m 只统计字符数 c 只统计字节数 L 最大行的长度 不管指定选项的顺序如何,其信息显示的顺序都是固定的,遵从上面从上到下的顺序。 若不加参数,则默认显示l,w,m三项。
若不加参数,则默认显示l,w,m三项。
说明有误。实际应该等价于 -lwc
By default, wc prints three counts: the newline, words, and byte counts.
造成误解的一个很大的原因可能因为,字符数和字节数在某些情况下相等了。为什么相等呢?因为
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.