我正在尝试读入R中的this fixed-width file。我想只读取长度为2,2和6的前3列,这样第二个变量的值为“A”。请注意,第二个变量有两个空格,但实际上只有一个字符。我正在使用这个命令:
b = trim(read.csv(pipe("awk -v FIELDWIDTHS='2 2 6' -v OFS=',' '($2=='A '){ $1=$1 ''; print }'</path/rawk.txt"),header=F))
我收到此错误:
awk: cmd. line:1: ($2==A
awk: cmd. line:1: ^ unexpected newline or end of string
Error in read.table(file = file, header = header, sep = sep, quote = quote, :
no lines available in input
如果我删除'A'中的空格:
b = trim(read.csv(pipe("awk -v FIELDWIDTHS='2 2 6' -v OFS=',' '($2=='A'){ $1=$1 ''; print }'</path/rawk.txt"),header=F))
我仍然收到此错误:
Error in read.table(file = file, header = header, sep = sep, quote = quote, :
no lines available in input
我做错了什么?
答案 0 :(得分:2)
这似乎有效:
read.csv(pipe("awk -v FIELDWIDTHS='2 2 6' -v OFS=',' '($2==\"A \"){ $1=$1 \'\'; print }'<rawk.txt"),header=FALSE)
V1 V2 V3
1 10 A 10001
2 10 A 10002
3 10 A 10003
但我不确定1美元= 1美元是什么......
答案 1 :(得分:2)
对于这么简单的事情,您是否可以更轻松地查看该行的子字符串而不是考虑其中的“真实”固定宽度字段?
b = trim(read.csv(pipe("awk 'substr($0,3,2)==\"A \"' /path/rawk.txt"),header=F))