在R中管道awk

时间:2013-01-10 10:30:50

标签: r unix awk

我正在尝试读入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

我做错了什么?

2 个答案:

答案 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))