2014-04-17 9 views
2

특정 문자열 "Gtype"이있는 collumns를 삭제하고 싶습니다. .txt 탭으로 구분 된 파일에서. R : df <- df[, -grep("GType.", colnames(df))]에서이 명령을 이미 시도했습니다. 그러나 내 행렬은 너무 커서 (13GB 이상) R은 처리 할 수 ​​없습니다.특정 문자열이있는 텍스트 파일의 열 삭제

내 입력 파일 : (오류가 .... 크기의 벡터를 할당 할 수 없습니다) :

Log.NE122 Gtype.NE122 Log.NE144 Gtype.NE144 
-0.33   AA   1.0   AB 

내 예상 출력 : 나는 bash는 작동하는지 궁금

Log.NE122 Log.NE144 
    -0.33  1.0  

. 누군가가 다른 옵션이있는 경우 ....

+0

"Gtype"은 첫 줄에만 표시됩니까? – Ashkan

+0

예, 저는 테이블의 머리입니다. – user3091668

답변

2

는 AWK를 사용 :

awk 'NR==1{for (i=1; i<=NF; i++) if ($i ~ /Gtype/) a[i]; 
    else printf "%s%s", $i, OFS; print ""; next} 
    {for (i=1; i<=NF; i++) if (!(i in a)) printf "%s%s", $i, OFS; print "" }' file 
Log.NE122 Log.NE144 
-0.33  1.0 
+0

안녕하세요, Anubhava, 나는 거의 비슷한 문제가 있습니다. 내 문자열은이 'RT12-ABS-NSA'또는이 'ADM_THO_CVL2000'과 같습니다. 그러나 스크립트의 일부를 변경하여 해당 문자열을 찾으면 아무 일도 일어나지 않습니다. 이유에 대한 단서가 있습니까? –

+0

@AndyK : 샘플 데이터와 기대되는 결과를 보지 않고서는 아무 것도 제시하기가 어렵습니다. 가능한 모든 관련 세부 정보를 사용하여 질문을 작성하는 것이 좋습니다. – anubhava

+0

사과, Anubhava. 귀하의 솔루션이 작동합니다. 나는 내 목적을 위해 그것을 수정했다 'awk -F ";" 'NR == 1 {for (i = 1; i <= NF; i ++) if ($ i ~/Gtype /) a [i]; else printf "% s % s", $ i, OFS; 인쇄 ""; 다음에} {(i = 1; i <= NF; i ++) if (! (i in)) printf "% s % s", $ i, OFS; print ""} '' 내 세미콜론을 제거하고 대신 공간을 제공합니다. –

2

또한 'data.table'패키지를 사용하여 시도하고 NULL 열을 지정할 수 있습니다

dt <- data.table(df) 
dt[, colToDelete := NULL] 

"데이터를 .table "은 복사 작업을하지 않고도 대부분의 작업을 수행하려고 시도합니다. data.frame에서 작업하는 방법에 따라 복사본을 만들어야합니다.

+0

'setDT (df)'는'data.frame'을'data.table'에 복사하는 것을 방지합니다 - 참조로 변환하여 :). 'setDT (df) [, col_to_delete : = NULL]' – Arun