2000 개의 호스트 이름을 가진 큰 파일이 있고 파일 당 각 호스트가 25 개인 여러 파일을 만들고 싶지만 쉼표로 구분하고 마지막 파일 ,
은 제거해야합니다.
Large.txt :
host1
host2
host3
.
.
host10000
below-split 명령은 file1
, file2
... 와 같은 여러 파일을 생성 하지만 호스트가 ,
분리되지 않고 예상 출력이 아닙니다.
split -d -l 25 large.txt file
예상되는 출력은 다음과 같습니다.
host1,host2,host3
2 개의 개별 작업을 수행해야합니다. 1) split
파일 및 2) split
.
첫 번째 단계는 이미 완료되었습니다.
split -d -l 25 large.txt file
두 번째 단계에서는 기본 split
명령에 의해 첫 번째 파일에 덤프 된 결과로 작업 해 보겠습니다 .
$ cat file00
host1
host2
host3
...
host25
쉼표 ( ,
)를 구분 기호 로 사용하여 이러한 행을 단일 행으로 끌어오고 싶습니다 . 이 예에서는 awk
솔루션을 사용합니다 .
$ cat file00 | awk '{ printf "%s%s", sep, $0 ; sep="," } END { print "" }'
host1,host2,host3...,host25
어디:
sep
처음에는 정의되지 않음 (빈 문자열이라고도 함)awk
설정 sep
하여 처리 된 각 연속 줄에서printf
(줄 바꿈을 포함하지 않고 \n
) 각각의 연속이되도록 printf
출력의 첫 '라인에 추가 할END
파일의 마지막에 줄 바꿈 인쇄하여 스크립트split
출력의 사용자 지정 형식 지정을 허용하기 위해 보조 스크립트 / 코드 조각을 호출하는 옵션이있는 경우도 마찬가지입니다 (에서 생성됨 split
). 옵션은 --filter
입니다. 명심해야 할 몇 가지 문제 :
split
은 --filter
옵션에 나열된 명령에 대한 입력으로 (효과적으로) 파이프됩니다.split
명령--filter
옵션 split
은 $FILE
변수를 사용하여 현재 outfile 이름에 자동으로 액세스합니다.모든 것을 하나로 모으면 다음과 같은 이점이 있습니다.
$ split -d -l 25 --filter="awk '{ printf \"%s%s\", sep, \$0 ; sep=\",\" } END { print \"\" }' > \$FILE" large.txt file
$ cat file00
host1,host2,host3...,host25
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다