2012-04-12 11 views
2

これは、thisの質問に続くものです。私はthis固定幅のファイルを持っています。ここで、columns-widthは34 2 3 2 2 1 2 2 1 1 2 2 1 2 2 2と65です。最初と最後の列を削除した後、これをRに読み込みます。第2の列は値「07」を有する。マットのおかげで、私はちょうどCSVにtxtファイルを変換したい場合は、私はこのコードでそれを行うことができます。もちろん配管用unixコマンド

awk -v FIELDWIDTHS='34 2 3 2 2 1 2 2 1 1 2 2 1 2 2 2 65' -v OFS=',' '($2=='07'){ $1=$1 ''; print }' </filepath/pipe.txt | cut --delimiter=',' --fields=2- > /filepath/parsed.csv 

、私はその後にparsed.csvファイルを読むことができますしかし、私はそれをやろうとしています。 1回のショットはpipe()です。私はRにパイプにこれをしようとすると、それがハングアップ:

a = read.csv(pipe("awk -v FIELDWIDTHS='34 2 3 2 2 1 2 2 1 1 2 2 1 2 2 2 65' -v OFS=',' '($2=='07'){ $1=$1 ''; print }' 
        </filepath/pipe.txt 
        | cut --delimiter=',' --fields=2-") 
      , header=F, colClasses="character") 
+0

あなたのタイトルにSOLVEDを追加しないで、正解をチェックしてください...さらに、デフォルトのものからより意味のあるものにあなたの名前を変更したいかもしれませんが(これは私の意見です)。 –

+0

ポール、私は "正しい"答えがなかったので "解決済み"を追加しました。問題は質問そのものであり、私は自分自身が遭遇した実現である。下記の避難所のメモをご覧ください。 – user702432

+0

私はその状況を理解しています。あなたの答えを編集して、あなたの問題を解決したことの説明を含めることをお勧めします。これはSO上で完全に受け入れられます。 –

答えて

3

私はpipe()わからないですが、私はsystem()でそれを行うだろう。

library(stringr) 
txt <- system("awk -v FIELDWIDTHS='34 2 3 2 2 1 2 2 1 1 2 2 1 2 2 2 65' -v OFS=',' '($2=='07'){ $1=$1 ''; print }' < pipe.txt | cut --delimiter=',' --fields=2-", intern=T) 
do.call(rbind, str_split(txt, ",")) 
0

jigr(および他の読者) - 私はR/RStudioで最も奇妙なことを発見しました。

a = read.csv(pipe("awk -v FIELDWIDTHS='34 2 3 2 2 1 2 2 1 1 2 2 1 2 2 2 65' -v OFS=',''($2=='07'){ $1=$1 ''; print }' </filepath/pipe.txt | cut --delimiter=',' --fields=2-"), header=F, colClasses="character") 

これはどうして起こっているのか、私は少し考えていません。

+0

これはシェルの動作方法です。あなたはまた、 '|' char 'を実行すると、シェル'パーサ 'はコマンドが次の行に続くことを期待しているので、それはうまくいったでしょう。継続について言えば、最初の行の最後に '\'(一重引用符は使用しないでください)を使用することもできます。それはしばしば継続文字と呼ばれ、行の最後の文字でなければなりません。がんばろう。 – shellter

+0

さて、私は生きて学びます。ヒント、シェルターありがとう。 – user702432

関連する問題