해당 줄의 값이 다음 줄과 다른 경우 텍스트 파일에 새 줄을 추가하는 명령이 있습니까?

해당 줄의 값이 다음 줄과 다른 경우 텍스트 파일에 새 줄을 추가하는 명령이 있습니까?

sort -n을 사용하여 정렬된 파일이 있습니다. 그런데 gnuplot에서 표면 플롯을 그리려면 첫 번째 열의 값이 다른 행 사이에 빈 행이 필요합니다. 예를 들어

1.0
1.0
1.1
1.1

도착하다:

1.0
1.0

1.1
1.1

Ubuntu Linux를 사용하여 이를 쉽게 수행할 수 있는 방법이 있습니까?

답변1

나는 다음과 같이 쓸 것입니다 :

awk 'NR > 1 && $0 != last {print ""}
     {print; last = $0}' < your-file

행이 숫자로 구성되어 있는 한 $0 != last이는숫자or 또는 or와 동일하게 비교합니다 1.0(반드시 0x1일 필요는 없지만 소수 구분 기호 처리(1.0 대 1,0)에 대한 로캘의 잠재적인 영향도 참고). 어휘 비교를 보장하려면 로 변경하세요.11e01.00$0 "" != last

awk구현 에 따라 이는 memcmp()(바이트 대 바이트 비교), strcmp()(동일하지만 NUL 바이트를 처리할 수 없음), strcoll()(두 문자열 모두 동일하게 정렬) 또는 wcsncmp()(바이트 대 단어 섹션이 아닌 문자 대 문자)를 적용합니다. ) 비교(입력에 십진수와 마침표 문자만 포함된 경우 모두 동일해야 합니다).

바이트 간 비교를 강제하려면 로캘을 C로 수정하세요.

LC_ALL=C awk 'NR > 1 && $0 "" != last {print ""}
              {print; last = $0}' < your-file

(또한 일부 awk구현에서는 NUL 문자를 차단합니다).

답변2

다음과 같은 작업이 수행됩니다.

awk 'BEGIN {A=""} {if ($0!=A) { printf "\n%s\n", $0; A=$0} else print $0}'

A의 초기화 값을 선택할 때 기존 값에 속하지 않도록 주의하세요.

관련 정보