#将b.dat中的指定的域替换为a.dat中的内容
awk 'FILENAME=="a.dat"{a[FNR]=$0}FILENAME=="b.dat"{$3=a[FNR];print}' a.dat b.dat
awk 'NR==FNR{a[NR]=$1}NR>FNR{if (FNR in a) $3=a[FNR];print}' a.dat b.dat
awk 'NR==FNR{a[NR]=$0; var=FNR} NR>FNR{ print $1,$2,a[NR-var],$4}' a.dat b.dat # 我写的,还是不大好
<==============================================================================>============= #从"new.txt"中找出在"old.txt"中不存在的record awk 'FILENAME=="old.txt" {a[$2]=$0} FILENAME=="new.txt" { if (!($2 in a)) print $0 }' old.txt new.txt
awk -F';' 'FILENAME=="CaseId.log" {a[$1]=1} FILENAME=="XScaselist.log" { if (($1 in a)) {print $0} }' CaseId.log XScaselist.log
<==============================================================================>============= #找出modelname和作者
awk -F';' '{ modelPath=$(NF-3); modelName=gensub(/.*\//, "", "g", modelPath); print modelName, $(NF-1) }' KCG.TracingTable
#处理NoExistentErr.txt按作者分类
awk 'BEGIN{ RS="<==="} { if( ( $0 ~ /DX\>/) ) {print RS,$0}}' NoExistentErr.txt
<==============================================================================>============= #CVK review 的Header of generated code is correct的检查
ls *.* | xargs awk '/\/* \$\*\*/,/\*\*\$ \*\// {a[FILENAME]++; if( a[FILENAME] < 2 ){printf "\n%s\n", FILENAME }; printf "%s\n", $0}'
<==============================================================================>============= #某个模式和它的前几行,这里是之前的第2行
awk '/vPattern/&&NR>2{print a[NR%2]"\n"$0}{a[NR%2]=$0}'
#awk中的变量a先取值,然后把这个结果当作正则来处理了,而非用//的时候把变量名当作正则来处理
awk -v a='a.*' '{sub(a,"");print}' xx
#awk 单引号的特殊性
awk -v hq="'" '{print $1,$2, hq $3 hq}'
<==============================================================================>=============
###用awk 有 以下几种方法去调用变量:
1. awk –v "a=$var1" –v "b=$var2" '{print a,b}' yourfile
注意, 对每一个变量加一个 –v 作传递.
2. awk '{print a, b}' a=$var1 b=$var2 yourfile
注意, 变量位置要在 file 名之前, 否则就不能调用. 例如:
awk '{print a, b}' a=111 file1 b=222 file2
file1 不能调用 b=222.
在BEGIN{}中是不能调用这些的variable. 除了-v.
3. awk ’{print “’”$LOGNAME”’”}’ yourfile
“ ’ “ $LOGNAME “ ’ “
<==============================================================================>============= #RT的用法
gawk ’BEGIN { RS = "\n|( *[[:upper:]]+ *)" }{ print "Record =", $0, "and RT =", RT }’
比较 file1的1-4字符 和 file2的2-5 字符,如果相同,将file2 的第二列 与 file1 合并
awk 'NR==FNR{a[substr($1,2,5)]=$2} NR>FNR&&a[b=substr($1,1,4)]{print $0, a[b]}' file2 file1
<==============================================================================>============= # gensub 处理对齐
awk '{ if ( ( length($0) > 133 ) ) {if ($0 ~ /+---+/){ print gensub(/\-\-\-\+/, "+", 2)}else{ print gensub(/ \|/, " \|", 1) }} else { print $0 } }' MTC_CruiseControl_RecordFile_1-1.txt
#统计文件中冒号的数量
awk -v RS=: 'END{print NR-1}' urfile