我有一个包含数百万行和数千列/字段的输入文件。谁能向我解释一下,为什么下面两种产生相同输出的 awk 方法在 CPU 运行时间方面差异如此之大?
175.0 秒:
awk 'BEGIN{FS=":| "}NR>1{field1=$1;field2=$2;$1="";$2="";print field1":"field2,field1":"field2,field2,$0}' file_in > file_out
19.7 秒:
cat file_in | awk 'BEGIN{FS=":"}NR>1{print $1,$2}' | awk '{print $1":"$2,$1":"$2,$0}' | cut -d " " -f 3 --complement > file_out
这是一个 file_in 的第 2 行和第 3 行,只有数百列/字段(行之间没有换行符):
1:1000071 C T 1 0 0 1 0 0
1:1000759 C T 1 0 0 0 1 0
以下是 file_out 的相应行:
1:1000071 1:1000071 1000071 C T 1 0 0 1 0 0
1:1000759 1:1000759 1000759 C T 1 0 0 0 1 0