2013-10-20 2 views
-1

지정된 포맷으로 라인을 얻을 수 있습니다 :리눅스 명령은 내가 다음과 같은 형식의 CSV 데이터를

1 number  tab one 
    2 number two 
    3 number three 

지금은 다음과 같은 형태로 데이터를 변환 할 :

1 number tab one 
    2 number two 
    3 number three 

즉 내가 원하는 첫 번째 탭은 그대로 유지되지만 두 번째 및 연속 탭은 공백으로 대체됩니다. linux 명령 (sed 등)을 사용하여 그렇게 할 수 있습니까? 대체를 위해 sed를 사용할 수 있지만 첫 번째 탭 공간을 건너 뛰고 두 번째 탭 공간에서 대체를 시작할 수 있음을 알고 있습니다.

+0

'awk'을 (를) 찾고있는 것처럼 보입니다. –

+0

@JimGarrison 나는 sed를 시도 했어 ./^[\ t] * // '하지만 그럴 필요는 없다. –

답변

3

:

sed 's/\t/ /2g' file 
1

awk을 사용하면 다음과 같이 할 수 있습니다.

cat file 
1  number tab  one 
2  number two 
3  number three 

awk

awk '{$1=$1;sub(/ /,"\t")}1' 
1  number tab one 
2  number two 
3  number three 

$1=$1 세트의 모든 공간은 하나 개의 공간을 기본입니다. 탭에

sub(/ /,"\t") 변경 첫 번째 공간은

1 인쇄 모든

PS 다음을 사용하여 첫 번째 탭을 건너 뛸 수 있습니다 루프와 저점 모든 필드를 가고, 그런데 왜 함수가있는 경우 다음 필요가 더 복잡하기위한 그곳에? 이러한 유형의 요청은 학교 수업에만 있습니다.

1

첫 번째 탭을 건너 뛰는 것은 쉽지 않습니다.

하지만 당신은 문제가 이런 식으로 재구성 할 수 :

  1. 이것은 약간의 손실이있을 수 있습니다 탭

와 함께 최초의 우주를 교체 공백으로 모든 탭 교체를하지만, 실제로입니다 무시할 수 있으며 결과는 동일합니다.

sed -e 's/ //g; s// /' < yourfile.txt 

입력하려면 Tab characters rs 명령 줄에서 Ctrl-V TAB을 입력해야 할 수 있습니다. 세미콜론이 두 명령을 분리하는 작동하지 않습니다 sed의 이전 구현에

대신 2 -e 표현식을 사용할 수 있습니다 :이 (GNU가 나오지도) 당신을 위해 작동 할 수

sed -e 's/ //g' -e 's// /' < yourfile.txt 
1
cat file 
1 number  tab one 
2 number two 
3 number three 
관련 문제