文本处理(grep, sed和awk等)Awk

awk处理文档:调用系统应用处理最后一列数据

2019-05-15  本文已影响1人  读或写

需求概要描述

实现

要选取好awk的分隔符,可以选用英文逗号做分隔符,但是要小心备注字段中的英文逗号引起列分隔异常。如果要选用逗号做分隔符可以直接用$NF来取得最后一列。也可以用组合分隔符,比如-F"["][,]["]"即","为分隔符。

此处为了方便直接用的逗号做分隔符

while read line; do res=`echo ${line} |awk -F[,] '{print $NF}'|awk -F[\"] '{print $2}'`; res1=`/data/dp_dir/decode/a.out ${res}`; echo ${line}",\""${res1}"\"">>./f1.txt; done < /data/dp_dir/decode/f.txt
awk -F[,] 'BEGIN{while(getline < "/data/dp_dir/decode/f2.txt"){a=substr($NF,2,length($NF)-2);b="'\''"$0"'\'',\\\"";cmd="echo "b"`/data/dp_dir/decode/a.out "a"`\\\"";system(cmd)};close("/data/dp_dir/decode/f2.txt");}'>> f6.txt
awk -F[,] 'BEGIN{while(getline < "/data/dp_dir/decode/f2.txt"){a=substr($NF,2,length($NF)-2);b="'\''"$0"'\'',\\\"";cmd="echo "b"`/data/dp_dir/decode/a.out "a"`\\\"";print cmd};close("/data/dp_dir/decode/f2.txt");}'>> f6.txt;sh f6.txt >> f7.txt

用strace -c -p跟踪了以下,发现方法一和方法二花费了96%的cpu时间在wait4调用上,所以慢了很多。

wget http://ftp.gnu.org/gnu/parallel/parallel-20190422.tar.bz2
tar -jxvf parallel-20190422.tar.bz2
cd parallel-20190422.tar.bz2
./configure --prefix=/usr/local/gnu
make && sudo make install
awk -F[,] 'BEGIN{while(getline < "/data/dp_dir/decode/f2.txt"){a=substr($NF,2,length($NF)-2);b="'\''"$0"'\'',\\\"";cmd="echo "b"`/data/dp_dir/decode/a.out "a"`\\\"";print cmd};close("/data/dp_dir/decode/f2.txt");}'>> f6.txt;cat f6.txt | /usr/local/gnu/bin/parallel --pipe sh >> ./f9.txt

time awk -F[,] '{a=substr($NF,2,length($NF)-2);print "echo '\''"$0"'\'',\\\"`/data/dp_dir/decode/a.out "a"`\\\""}' f2.txt >> f11.txt;time cat f11.txt|/usr/local/gnu/bin/parallel --pipe sh >> ./f13.txt
上一篇 下一篇

猜你喜欢

热点阅读