2011-08-08 2 views
1

줄의 n - N 줄을 자르고 싶지만 줄이 특정 문자로 시작하는 경우에만 줄 바꿈을합니다. 그렇지 않으면 전체 줄을 인쇄하려고합니다.조건이 맞으면 특정 줄의 문자를 잘라냅니다. 그렇지 않으면 전체 줄을 인쇄합니다.

단순화 된 파일 예 : 나는 두 개의 새로운 파일, 첫 6 개 번호 하나는 지난 6 개 번호와 다른,하지만을 만들고 싶어

John 
123456987123 
Mark 
123546792019 

여전히 헤더를 포함하는, 그래서

John 
123456 
Mark 
123546 

John 
987123 
Mark 
792019 

는 난 단지 문자열이 일치하지만, 그렇지 않으면 전체 파일을 제공하는 경우 절단에 그렙 잘라 말할 수 있습니까? 어떤 종류의 awk 명령은 조건이 충족되거나 라인 전체를 인쇄 할 경우 라인을자를 수 있습니까?

감사합니다.

답변

2

Grep은 잘리지 않고 grep 만 할 수 있습니다.

awk '/^[0-9]/{print(substr($0,0,6));next;} 
     # Fall through here in case of no match 
     {print}' inputfile 
+0

정말 고마워요! 그것은 완벽하게 작동합니다 (수정 사항이 많음). grep 'CHAR'| cut -c n = N 그러나 이것은 훨씬 잘 작동합니다. –

1

입력 파일을 한 번만 읽으면 단일 sed 스크립트에서 2 개의 파일을 생성 할 수 있습니다. 텍스트 파일에 벨로우즈를 넣고 실행은 sed -f script_file input_file입니다. f1과 f2 파일을 생성하고 입력 파일을 출력합니다.

/^[^0-9]/{ 
w f1 
w f2 
} 
/^[0-9]/{ 
h 
s/^\(.\{6\}\).*/\1/ 
w f1 
g 
s/^.\{6\}// 
w f2 
g} 
0

그렙 괜찮을해야합니다

grep -E -o '^[0-9]{6}|^[^0-9].*' input > first.txt 
grep -E -o '[0-9]{6}$|^[^0-9].*' input > last.txt 
관련 문제