相关视频链接:https://www.bilibili.com/video/BV1JF411e7LH
首先新建新文件,vim script.txt 之后将下面四行复制进文件,保存退出后运行bash script.txt
echo -e "\n\n\n\n\n\n\n\n\n\n" > le.tmp
awk 'BEGIN{FS=OFS="\t"}NR<11{print NR,"line_"NR"_col1","file1_line_"NR"_col_2","file1_line_"NR"_col_3"}' le.tmp > file1
awk 'BEGIN{FS=OFS="\t"}{print NR,"line_"NR"_col1","f2_l_"NR"_c_2","f2_l_"NR"_c_3"}' le.tmp > file2
rm le.tmp
grep常用用法:
grep 'line_5' file1 #搜索 file1 中含有 line_5的行
grep 'line_5' file1 -n #显示行号
grep 'line_5' file1 -v #搜索不含有line_5的行
grep 'line_5_col1' file1 -w #搜索含有line_ 5 _col1的词所在行
grep 'line_5' file1 -w #搜索含有line_ 5 的词所在行
grep 'line_5' file1 -v -n #搜索不含有line_5的行 显示行号
grep 'line_5' file1 -A 3 #搜索含有line_5的行,并输出之后3行 After
grep 'line_5' file1 -B 3 #搜索含有line_5的行,并输出之前3行 Before
grep 'line_5' file1 -C 3 #搜索含有line_5的行,并输出前后三行 Context
grep 'line_5_col1' file1 -wnC 2 #参数合并
sed常用用法
sed 's/line_4/4444/g' file1 #将 file1 中line_4 替换为4444
sed -n 's/line_4/4444/g' file1 #取消默认输出
sed -n 's/line_4/4444/gp' file1 #只输出匹配后替换的行
sed -n 's/line_4/4444/gp' file1 #
sed '1,5w sed.txt' file1 #将file1 1-5行写入sed.txt
sed “args1,args2,w filename.txt” filename-01 # sed 传入变量使用双引号
awk常用用法
awk ‘BEGIN{FS=”sep”;OFS=”sep”}{}END{}’ file #标准句式1
awk ‘BEGIN{FS=”sep”;OFS=”sep”;print “context”}NR==num{print “contest”}{}{}END{print “context”}’ file #标准句式2
awk ‘BEGIN{FS=OFS=”sep”}{print “context”}‘ file #常用句式
sep:文件分隔符,一般为“\t”:Tab分割,“,”:逗号分割。awk默认分隔符为一个或多个空格或tab。
awk内置变量:awk是逐行读取文本并按指定命令编辑文本,内置变量是指awk读入文本后,在awk内部解析出的变量或指定的变量,常用的有:
FS:输入字符风隔符,默认为空白字符,一般指定。
OFS:输出字段分隔符,默认为空白 字符,一般指定。
NR:文件行数。
FNR:多个文件从1开始分别计数的行号。
awk '{print $1}' file1 #$1 第一个字段,$n,第n个字段,$0,所有字段。
awk '{print $2}' file1
awk '{print $1,$2}' file1
awk '{print $1,$2}' file1 | cat -A
awk '{print $1”\t”$2}' file1
awk '{print $1”\t”$2}' file1 | cat -A
awk 'BEGIN{FS=OFS="\t"}{print $4,3}' file1 | cat -A
awk 'BEGIN{FS=OFS="\t";sum=0}{sum=sum+$1}END{print sum}' file1
awk -v sum=0 'BEGIN{FS=OFS="\t"}{sum=sum+$1}END{print sum}' file1 #不能出现单引号,双引号内text原样输出。
awk结合数组
awk 'BEGIN{FS=OFS="\t"}{a[$2]=$0}END{print a["line_1_col1"]}' file1
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$4}NR>FNR{print $0,"file1",a[$1]}' file2 file1
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$4}NR>FNR{print $0,"file1",a[$1]}' file1 file2
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$4}NR>FNR{if( $1 in a){print $0,"file1",a[$1]}}' file1 file2
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$4}NR>FNR{if( $1 ~ "[0-9]"){print $0,"file1",a[$1]}}' file1 file2
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$4}NR>FNR{if( $1 ~ "[A-Z]"){print $0,"file1",a[$1]}}' file1 file2
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$4}NR>FNR{if( $1 ~ "[123]"){print $0,"file1",a[$1]}}' file1 file2
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$4}NR>FNR{if( $1 ~ "[1,2,3]"){print $0,"file1",a[$1]}}' file1 file2
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$4}NR>FNR{if( $1 ~ "11"){print $0,"file1",a[$1]}}' file1 file2
awk结合数组结合split
awk 'BEGIN{FS=OFS="\t"}{split($2,a,"_");print a[1],a[2],a[3]}' file1
awk 'BEGIN{FS=OFS="\t"}NR==FNR{ split($2,a,"_");b[a[1]]=$4}NR>FNR{if( $1 in a){print $0,"file1",b[$1]}}' file1 file2
awk'BEGIN{FS=OFS="\t"}NR==FNR{split($2,a,"_");b[a[2]]=$4}NR>FNR{if($1 in b){print $0,"file1",b[$1]}}' file1 file2
awk结合for循环
awk 'BEGIN{FS=OFS="\t"}{for(i=1;i<num;i++){print "text"}}' file1 #awk结合for循环;num为数字变量
awk 'BEGIN{FS=OFS="\t"}{for(i=1;i<NF;i++){print $i}}' file1
awk 'BEGIN{FS=OFS="\t"}{for(i=1;i<NF;i++){printf $i}print $NF}' file1
awk 'BEGIN{FS=OFS="\t"}{for(i=NF;i>1;i--){printf $i"______"}print $NF}' file1