【linux】 sed、awk、cut、sort、uniq等命令

head [文件] -n 15 //默认是查看前10行
tail [文件] -n 5
tail -f [文件] //实时看
cat [文件] | grep -n "jdslk" //加-n显示行号
cat /etc/passwd | grep -v -n mapred:*
cat a.txt | wc -l //统计

-e 是编辑命令,用于多个编辑任务
-f 
-h 帮助。
-n 仅显示script处理后的结果。

a :新增
c :取代
d :删除
i :插入
p :打印
s :取代

-r 命令是读命令
-w是写入命令
sed '/7/r a.txt' cut.txt //sed使用该命令将一个文本文件中的内容加到当前文件的特定位置上
sed '/6/,/5/ w a.txt' cut.txt //匹配包含6和5的行后写入cut.txt',真实写入
sed -n '1,3p' /etc/passwd
sed '1,2s/ /\t/g' cut.txt
sed '$!N;s/\n/\t/g' cut.txt //合并上下行
sed 's/\n/\t/g' cut.txt
sed -n '$p' /etc/passwd //最后一行
sed -e '1i abc' /etc/passwd //文件第一行加"abc"
sed -e '$a abc' /etc/passwd //文件末尾加"abc"
sed '1,4i abc' /etc/passwd //文件第1和4行加"abc"
sed '2,9d' /etc/passwd //删除3~9行
sed '/4/,/3/d' cut.txt //删除包含4和3之间的行
sed '/6/,4d' cut.txt //删除包含"omc"的行到第4行的内容
sed -e '/6/,4d' -e '=' cut.txt //-e '=' 可以显示行号

cut -f4  -d ' ' cut.txt 
cut -f1 cut.txt

cat b.txt a.txt a.txt | sort | uniq -u
grep -v -f a.txt b.txt //剔除掉b.txt文件中含有a.txt的内容
cat cut.txt | grep -v -f a.txt //剔除掉b.txt文件中含有a.txt的内容
grep -f a.txt cut.txt //交集

awk '/root/' [file]
awk -F " " '{print $1,$3}' [file]
awk -F ':' '/root/ {print $1,$2,$3}' /etc/passwd  //过滤包含'root'的行,并打印出1,2,3列,以':'分割
awk -F ":" '{print NF}' /etc/passw  //每行的列数
awk '{print NR}' /etc/passwd		//行号
awk '{print FILENAME}' /etc/passwd	//文件名
awk -F ':' '{print "filename:" FILENAME ",linenumber" NR ",columns" NF ",linecontont" $0}' /etc/passwd
awk -F ':' '{printf ("filename:%10s,linenumber:%3s,columns:%3s,linecontont:%3f\n",FILENAME,NR,NF,$0)}' /etc/passwd
awk 'NR<30{printf("%100s%3s\n",$0,NR)}' /etc/passwd	//格式化输出行数小于30的内容
ls -1F | awk '/^[0-9]/' awk的过滤使用方法
awk -F ":" '{print $NF}' /etc/passwd  //指定特定的分隔符,查询最后一列
awk -F ':' '{print $NF-1}' /etc/passwd //指定特定的分隔符,查询最后一列
awk -F ':' '{if(NR>10&&NR<15) print $0}' /etc/passwd //获取第10到15行
awk -F: 'BEGIN{print "kaishi..."} {if(NR>10&&NR<13)print $0} END{print "jieshu....."}' /etc/passwd //BEGIN..END

last | awk '{A[$3]++} END{for(a in A ) {print A[a],a}}' |uniq| sort -rh //查看最近登录最多的IP信息
last | awk '{A[$3]++} END{for(a in A ) {print "...."}}'
//正则匹配
awk -F '[\t]+|[ ]+' '{print $1}' a.txt

sed 's/\s\+/\n/g' words.txt | tr -s '\n' | awk -F " " '{A[$1]++} END {for (a in A) {printf("%-0s %0s\n",a,A[a]) }}' | sort -t $' ' -k2nr
grep -P '^(\d{3}-|\(\d{3}\) )\d{3}-\d{4}$' file.txt
sed -n -r '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/p' file.txt
awk '/^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-([0-9]{4})$/' file.txt

0-255

^([0-2].*([0-9])+)(\.[0-2].*([0-9])+){3}

grep -P '^([0-2].*([0-9]+))(\.[0-2].*([0-9]+)){3}' file.txt


正侧匹配电话号码
grep -P '^(\d\.|\d{2}\.|[0-2]\d{2}\.){3}' file.txt


sort -t $'\t' -k2nr   //k2表示分割后第二列进行排序,n表示按照数值排序,r表示降序排序(默认是按照升序进行排序)

cat cut.txt | tr -s '\n' | awk -F ' ' '{A[$2]++} END {for(a in A) {print A[a],a}}'

cat cut.txt | tr -s '\n' //去除空白行

NF 多少列
NR 是读到第几行


//给定一个文件 file.txt,转置它的内容。
awk '
{
for (i=1;i<NF;i++) {
	if (NR==1){
		a[i]=$i
	}
	else{
	    a[i]=a[i] ' ' $i
	}
}
}

END
{
	for (int i=0;i<NF;i++){
		print a[i]
	}
}
' file.txt

//给定一个文本文件 file.txt,请只打印这个文件中的第十行
awk 'BEGIN {a="no"} {if(NR==5){a=$0 }} END {print a}' 


//词频统计
sed 's/\s\+/\n/g' words.txt | tr -s '\n' | awk -F " " '{A[$1]++} END {for (a in A) {printf("%-0s %0s\n",a,A[a]) }}' | sort -t $' ' -k2nr





猜你喜欢

转载自blog.csdn.net/qq_33202508/article/details/100543356