在Linux上:
library(tidyverse)
plots = df %>%
group_by(a) %>%
mutate(deg_free = MASS::fitdistr(b, "t")$estimate["df"]) %>%
# This second group_by is just used to keep the deg_free value
# in the final dataframe, could be removed
group_by(a, deg_free) %>%
do(
plot = ggplot(data=., aes(sample=b)) +
geom_qq(distribution = qt, dparams = list(.$deg_free)) +
geom_qq_line(distribution = qt, dparams = list(.$deg_free)) +
ggtitle(.$a)
)
# Using map to unpack the list-column into a list, there's
# probably a better way
cowplot::plot_grid(plotlist=map(plots$plot, ~ .))
返回期望值
echo -n $'boo\r\nboo\r\n' | awk $'BEGIN { RS="\\n" } {gsub("boo","foo"); print}' | cat -v
但是,在mingw64(适用于Windows的git bash)上,该命令返回:
foo^M
foo^M
没有回车。
我尝试显式设置记录分隔符,因为也许两个平台之间的默认分隔符不同,但是mingw64上的awk仍在咀嚼回车。如何使Awk在mingw64的Linux上做同样的事情?请注意,awk版本略有不同(Linux上的GNU Awk 4.0.2和mingw64上的GNU Awk 4.2.1),但是除非有某种错误,否则我认为这并不重要。
请注意,由于在mingw64上这是在awk中专门发生的事情:
foo
foo
返回期望值:
echo -n $'boo\r\nboo\r\n' | cat -v
答案 0 :(得分:1)
搜索了一段时间后,我发现了this question,并且从this answer中找到了:
这是由C库完成的,要阻止它发生,您应该将awk BINMODE变量设置为3
我将您的代码更改为:
echo -n $'boo\r\nboo\r\n' | awk -v BINMODE=3 $'BEGIN { RS="\\n" } {gsub("boo","foo"); print}' | cat -v
并在Unix,Linux,MacOS和Windows上进行了尝试,均产生以下输出:
foo^M
foo^M
您正在寻找-v BINMODE=3
。
注意,只有-v BINMODE=3
此开关和代码才能正常工作。
通常,我们可以通过-v
块中的BEGIN
开关将变量传递给awk,或者在文件之前的代码之后设置它,
但是在这种情况下,我尝试了三种方式,只有-v BINMODE=3
有效。
猜猜这与awk
的编译过程有关。
示例(在Windows上为cygwin
下):
$ echo -n $'boo\r\nboo\r\n' | awk -v BINMODE=3 '1' | cat -v
boo^M
boo^M
$ echo -n $'boo\r\nboo\r\n' | awk 'BEGIN{BINMODE=3}1' | cat -v
boo
boo
$ echo -n $'boo\r\nboo\r\n' | awk '1' BINMODE=3 | cat -v
boo
boo
在其他提到的平台下,它们都产生:
boo^M
boo^M