Linux 基础命令知识2

用cut 安列切分文件

#平时按列切分文件用的最多的就是awk ,cut 命令相对awk可能更加轻量级和命令简洁
#语法 cut -f FIELD_LIST filename # FIELD_LIST是需要的列,由列号组成,彼此之间用逗号分隔。
demo: cut -f 2,3 filename 打印第2列和第3列
cat test.txt 
123	xueping.you	test
234	xiaoming	test

cut -f 2,3 test.txt 
xueping.you	test
xiaoming	test

cut -f 2 test.txt | xargs 
xueping.you xiaoming

cut -f 1 --complement test.txt  #--complement用来取补集
xueping.you	test
xiaoming	test

cut -f2 -d"," test.txt # -d 用于指定分隔符

cut -c1-5 range_filed.txt #用于切分字符 cut range_field.txt -c1-3,6-9 --output-delimiter "," #按字符切分成两组使用分隔符"," 区分

sed(stream editor) 文本处理使用

# sed 可以替换给定文本中的字符串 , 它可以利用正则表达式进行匹配
sed 's/pattern/replace_string/' file 或者 cat file | sed 's/pattern/replace_string/'   # 匹配给定文本中的第一个匹配符使用replace_string进行替换
sed -i 's/pattern/replace_string/' #选项-i可以将结果应用于原文件 
sed -i 's/pattern/replace_string/g' #命令尾部加上g 能替换匹配到的所有内容
sed 's/pattern/replace_string/2g'  #使用2g表示替换从第三个匹配的地方开始替换,忽略前两处的替换

#sed 定界符可以使用任意, / | : 都是可以的例如: sed 's:text:replace:g'

######sed 通用命名 #######
#移除空白行 sed '/^$/d' file  ;/pattern/d会删除匹配样式的行,空白行的匹配是开始符紧随着结束符
#已匹配的字符串标记&  echo this is an example | sed 's/\w+/[&]/g' ; result: [this] [is] [example]
# echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/' 
# result:this is 7 in a number; \(pattern\) 用于匹配字符串,对于匹配的第一个子串,其对应的标记是\1 ,匹配的第二个子串是\2
demo:
echo this is digit 7 digit 8 in a number | sed 's/digit \([0-9]\) digit \([0-9]\)/\1\2/';
result: this is 78 in a number

awk入门使用

awk脚本的结构基本如下所示:
awk 'BEGIN{print "start"}pattern {commonds} END{print "end"}' file
#awk 命令工作方式
#(1)执行BEGIN{commond} 语句块中的语句
#(2)从文件或stdin中读取一行,然后执行pattern {commonds}。重复这个过程直到文件被读取完毕
#(3)当读至输入流末尾时,执行END{print comonds}语句块
Simple Demo:
echo -e "line1\nline2" | awk 'BEGIN{print "start"} {print }END{print "end"}'
start
line1
line2
end

echo | awk '{var1="v1";var2="v2";var3="v3";print var1,var2,var3;print var1"-"var2"-"var3}'
v1 v2 v3
v1-v2-v3

#特殊变量
NR:表示记录数量,在执行过程中对应于当前行号
NF: 表示字段数量,在执行过程中对应于当前行的字段数

echo -e "1,2,3,45,6,5" | awk -F ',' '{ for(i=0;i++<NF;) print $i;}' #按照 ","分割,使用for 遍历分割的列并做输出
1
2
3
45
6
5

#将外部变量传递给awk
方法1: var="Hello World";echo | awk -v vv=$var'{print vv}'
# 个人推荐使用这种方法v1=$var1 v2=$var2 作为awk参数 紧跟在BEGIN 、 {} 、END后面
方法2:var1="Hello ";var2="World";echo | awk '{print v1,v2}' v1=$var1 v2=$var2 

#我们可以为需要处理的行进行过滤
awk 'NR < 5' #行号小于5的行
awk 'NR==1,NR==4' #行号在1到5之间的行
awk '/linux/' #包含样式linux的行,(可以用正则表达式来指定样式)
awk '!/linux/' #不包含样式的linux行
cat test.txt | awk 'NR < 2 { print $0}'
123	xueping.you	test

#awk内建字符串控制函数
length(string):字符串长度
index(string, search_string):字符串在search_string 中出现的位置
split(string, array, delimiter) : 通过定界符生成一个字符串列表,并将该列表存入数组
substr(string , start_position, end_position)
sub(regex, replacement_str, string) : 将regex正则匹配的第一次内容替换为replacement_str
gsub(regex, replacement_str, string) : 将regex正则匹配的所有内容替换为replacement_str
match(regex,string): 检查正则表达式是否能够匹配字符串,如果能够匹配返回非0值,否则返回0



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章