파일의 다음 내용을 수정하는 방법:
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
도착하다:
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
이는 개나 고양이에만 국한된 것이 아니며 첫 번째 단어/용어를 상징적으로 표현한 것입니다.
답변1
다음을 수행할 수 있습니다.
awk -F: 'NR>1 && $1 "" != last {print ""}; {print; last = $1}'
이는 ""
강제 문자열 비교입니다. 이것이 없으면 입력 시 제대로 작동하지 않습니다. 예를 들면 다음과 같습니다.
100:foo
100:bar
1e2:baz
1e2:biz
여기서 100
및 는 1e2
숫자로 비교됩니다.
답변2
이것은 한 가지 방법입니다. 첫 번째 필드가 이전 줄의 필드와 다른 경우 구분선을 인쇄합니다...
$ awk -F: '$1!=a&&a{print ""}{a=$1}1' myfile
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
$
설명하다:
-F:
= 필드 구분 기호를 다음으로 설정합니다.:
$1!=a&&a
= 첫 번째 필드가 변수 "a"(이전 첫 번째 필드)와 같지 않고 변수 "a"가 어떤 값으로 설정된 경우(즉, 파일의 첫 번째 줄을 처리하지 않음){print ""}
= 빈 줄을 인쇄합니다{a=$1}
= 읽은 각 줄에 대해 변수 "a"를 첫 번째 필드로 설정합니다.1
= 이 줄을 인쇄하세요
답변3
나는 이런 식으로 노력한다
en ~]# awk '/cat/{print $0}' filename| sed '$s/.*/&\n/g';awk '/dog/{print $0}' filename
cat:persian/young-1
cat:winter/young-2
cat:summer/wild-3
dog:persian/young-1
dog:winter/young-2
dog:summer/wild-3
[root@praveen ~]#
답변4
이는 awk를 사용하여 수행할 수 있습니다.
awk -F: ' $0!="" && last!="" && $1!=last"" {print""} {last=$1} 1'
-F :
:
문자의 필드를 분할하는 데 사용됩니다 .$0 != ""
하나의 빈 줄을 세 개의 빈 줄로 변환하는 것을 피해야 합니다.
이를 통해 빈 줄을 추가하지 않고도 처리된 파일을 다시 처리할 수 있습니다.last != ""
파일의 첫 번째 줄을 피해야 합니다(마지막 줄은 비어 있음).$1 != last""
현재 첫 번째 필드를 이전 필드와 비교합니다.
후행을 사용""
하면 비교가 텍스트 모드에서 수행됩니다. 그렇지 않으면 동등한awk
숫자 값이 동일한 것으로 간주됩니다. 예를 들면 다음 과 같습니다.7:first line 7e0:second line 7.0000:third line 7.000000000000000000008:fourth line
{print""}
빈 줄을 인쇄합니다(위의 모든 테스트가 일치하는 경우).{last=$1}
행의 첫 번째 필드를 변수에 저장합니다last
.1
줄의 내용을 인쇄합니다(항상).