2014-11-01 3 views
1

텍스트 파일 리눅스의 모든 라인에, 특정 패턴을 추가나는 다음과 같은 형식의 파일이

sentenceA1  sentencek1 
     sentencek2 
     sentencek3 
sentenceA2  sentencel1 
     sentencel2 

(공간은 하나 개의 탭입니다) 그리고 출력이 원하는 :

sentenceA1  sentencek1 
sentenceA1  sentencek2 
sentenceA1  sentencek3 
sentenceA2  sentencel1 
sentenceA2  sentencel2 

내가 처음 한 두 번째 값을 (SED 사용) 두 파일을 작성하여 값을 구분하려하지만 이후 성공적으로
를 병합하는 방법을 모른다는 나오지도를 사용하거나하여이 가능 awk?

답변

3

이 AWK 작동합니다 :

awk 'NF==2{p=$1; print; next} {print p, $1}' file 
A1 k1 
A1 k2 
A1 k3 
A2 l1 
A2 l2 
+0

문제는 A1, A2, K1 등이 둘 이상의 단어 일 수 있습니다. 두 값 사이의 분리는 항상 두 공백입니다. – Jonathan

+1

질문을 편집하고보다 현실적인 예제 데이터를 제공하여 지정해야합니다. – anubhava

+1

실시간 데이터를 입력하십시오. – Hackaholic

0
awk '!/^\t/{p=substr($0,1,index($0,"\t"))} /^\t/{$0=p$0}1' input 
+0

이 방법은 효과적이지만 광고는 추가 '탭'으로 색인에서 '-1'만큼 제거하십시오. 'awk '{/^\ t /? $ 0 = p $ 0 : p = substr ($ 0,1, index ($ 0, "\ t") - 1)} 1'은 동일한 테스트를 두 번 반복 할 필요가 없습니다. ' – Jotne

0

이것은 단지 다시 awk 데이터가 올바른 얻을 anubhavas 게시물에 기반. 모든 라인에 tabs이 때문에

awk -F"\t" '$1{p=$1;print;next} {print p$0}' file 
sentenceA1  sentencek1 
sentenceA1  sentencek2 
sentenceA1  sentencek3 
sentenceA2  sentencel1 
sentenceA2  sentencel2 

모든 라인은 필드의 같은 번호를 가지고 있습니다.
줄이 tab으로 시작하는 경우 첫 번째 입력란은 아무 것도 아니므로 $1이이를 테스트합니다.

관련 문제