0

我正在尝试在 R 中读取此固定宽度文件。我只想读取长度为 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

我究竟做错了什么?

4

2 回答 2

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 是什么意思......

于 2013-01-10T14:14:48.543 回答
2

对于这么简单的事情,您能不能更轻松地查看行的子字符串,而不是考虑其中的“真实”固定宽度字段?

b = trim(read.csv(pipe("awk 'substr($0,3,2)==\"A \"' /path/rawk.txt"),header=F))
于 2013-01-10T14:26:22.773 回答