안녕하세요
델파이 7을 사용하는 초보입니다.
fixed length text file의 특정위치를 기준으로 sort를 하려고 하는데요
방법을 잘 모르겠네요
database를 사용하는게 아니고 결과값도 동일한 text file이어야 합니다.
고수님들의 조언 기다리겠습니다...
텍스트로된 파일의 행단위 정렬을 할때 사용하는 명령어이다.
복잡한 워드문서등의 편집이 아닌 간단한 텍스트문서를 대상으로 정렬작업을 할때 주로 사용되는 명령어이다.
이 명령어는 주로 특정 DB나 프로그램, 또는 쉘프로그램등의 입력값으로 사용되는 데이터를 직접 정렬하려고 할때 사용된다.
사용형식
sort [OPTION]... [FILE]...
사용예 #1
textfile이라는 파일의 내용은 아래와 같다.
[root@host3 command]# cat textfile
4 one nine
7 eight two
6 four six
9 six four
2 three seven
3 seven three
0 five five
1 nine one
8 two eight
5 ten zero
[root@host3 command]#
이 데이터를 간단히 정렬하기 위하여 다음과 같이 "sort 파일명"이라고 하였다.
[root@host3 command]# sort textfile
0 five five
1 nine one
2 three seven
3 seven three
4 one nine
5 ten zero
6 four six
7 eight two
8 two eight
9 six four
[root@host3 command]#
위와 같이 "sort textfile"이라고 하면 textfile의 각 행의 첫번째 단어(필드)들의 첫번째 문자들을 알파벳 오름차순으로 정령을 한다.
첫번째 문자가 동일할 경우에는 동일한 첫번째 문자를 가진 행끼리 두번째 문자를 가지고 정렬하게 된다.
두번째 문자가 동일할 경우에는 세번째.........
이런식으로 비교를 하여 정렬하게 된다.
아무런 옵션없이 사용하면 위의 예와 같이 화면으로만 출력한다.
그렇다면 이 결과를 파일로 저장하려면 어떻게 할까?
사용예 #2
이번에는 위의 출력되는 결과를 특정 파일에 저장하는 방법을 알아보자.
[root@host3 command]# sort textfile > textfile_sort
[root@host3 command]#
[root@host3 command]# cat textfile_sort
0 five five
1 nine one
2 three seven
3 seven three
4 one nine
5 ten zero
6 four six
7 eight two
8 two eight
9 six four
[root@host3 command]#
위와 동일한 정렬을 하여 textfile_sort라는 파일에 결과를 저장하여 cat으로 결과파일을 확인한 것이다.
textfile_sort파일이 존재하지 않는다면 새로 만들어서 저장을 하게 된다.
그리고 textfile_sort파일이 이미 존재하는 파일이라면 기존의 파일내용은 모두 삭제되고 정렬결과만이 저장이 된다.
사용예 #3
이번에는 textfile을 내림차순(역순)으로 정렬을 해보자.
아래와 같이 -r옵션을 사용하면 오름차순이 아닌 내림차순으로 정렬을 해준다.
이 명령의 결과는 위의 "사용예 #1"과 정반대의 결과임을 알 수있다.
이 결과 또한 파일에 저장을 하려면 "> 파일명"을 명령어의 끝에 추가하여 실행하면 된다.
[root@host3 command]# sort -r textfile
9 six four
8 two eight
7 eight two
6 four six
5 ten zero
4 one nine
3 seven three
2 three seven
1 nine one
0 five five
[root@host3 command]#
위의 결과는 textfile의 각 행에 있는 첫번째 문자들을 내림차순(역순)으로 정렬을 한 것이다.
첫번째 문자가 동일할 경우에는 동일한 첫번째 문자를 가진 행끼리 두번째 문자를 가지고 정렬하게 된다.
두번째 문자가 동일할 경우에는 세번째.........
이런식으로 비교를 하여 정렬하게 된다.
사용예 #4
지금까지의 예는 모두 각 행의 첫번째 필드를 대상으로 정렬을 하였다.
그렇다면 첫번째 필드를 무시하고 각 행의 두번째 필드들만을 대상으로 정렬을 할 수는 없을까?
각 행의 두번째 필드들만을 대상으로 정렬을 하고자한다면 아래와 같이 -k옵션을 사용하면 된다.
즉, 지금까지의 예들은 모두 각 행의 첫번째 필드인 (각행의 숫자들, 0,1,2,....,9) 숫자를 대상으로 정렬을 하였다.
-k옵션을 사용하면 각행의 두번재 필드들을 대상으로 정렬을 하게 된다.
[root@host3 command]# sort -k 2 textfile
7 eight two
0 five five
6 four six
1 nine one
3 seven three
9 six four
5 ten zero
2 three seven
8 two eight
4 one nine
[root@host3 command]#
결과를 보면 각 행의 첫번째 필드는 무시되고 두번째 필드를 기준으로 오름차순 정렬이 된 것을 알 수 있다.
사용예 #5
이번에는 각 행의 두번째 필드들을 기준하여 내림차순(역순)정렬을 한 예이다.
[root@host3 command]# sort -r -k 2 textfile
4 one nine
8 two eight
2 three seven
5 ten zero
9 six four
3 seven three
1 nine one
6 four six
0 five five
7 eight two
[root@host3 command]#
위의 결과를 보면 첫번째 필드인 숫자들과는 무관하게 두번째 필드를 기준으로 내림차순 정렬이 된 것을 확인할 수 있다.
사용예 #6
이번에는 3번째 필드를 대상으로 오름차순 정렬을 한 것이다.
[root@host3 command]# sort -k 3 textfile
8 two eight
0 five five
9 six four
4 one nine
1 nine one
2 three seven
6 four six
3 seven three
7 eight two
5 ten zero
[root@host3 command]#
위의 결과를 보면 각행의 세번째 필드들을 기준으로 정렬이 되었음을 알 수 있다.
사용예 #7
이번에는 3번째 필드를 기준으로 내림차순(역순)정렬을 한 예이다.
[root@host3 command]# sort -r -k 3 textfile
5 ten zero
7 eight two
3 seven three
6 four six
2 three seven
1 nine one
4 one nine
9 six four
0 five five
8 two eight
[root@host3 command]#
사용예 #8
이번에는 textfile2라는 파일의 내용을 아래와 같이 가정하여 예를 들어 보겠다.
즉, textfile2라는 파일에는 아래와 같이 동일한 내용의 중복된 내용이 있다.
중복된 것은 몇개가 되든 하나로 유일하게 취급하여 정렬하고자 한다면 -u옵션을 사용한다.
다음은 textfile2의 내용이다.
[root@host3 command]# cat textfile2
3 three
3 three
4 four
4 four
1 one
1 one
5 five
5 five
2 two
2 two
[root@host3 command]#
이것을 아래와같이 일반적으로 정렬을 하면 다음과 같이 오름차순으로 정렬이 될 것이다.
[root@host3 command]# sort textfile2
1 one
1 one
2 two
2 two
3 three
3 three
4 four
4 four
5 five
5 five
[root@host3 command]#
위의 결과를 보면 동일한 내용이 중복되어 들어가 있는 것을 볼 수가 있다.
아래는 이런 중복된 행을 하나로 취급하여 유일하게 정렬을 한 것이다.
[root@host3 command]# sort -u textfile2
1 one
2 two
3 three
4 four
5 five
[root@host3 command]#
사용예 #9
이번에는 유일하게 정렬하면서 내림차순(역순)정렬을 함께 한 것이다.
[root@host3 command]# sort -u -r textfile2
5 five
4 four
3 three
2 two
1 one
[root@host3 command]#
유일정렬과 역순정렬을 함께한 결과가 위와 같다.
사용예 #10
이번에는 두번째 필드를 기준으로 정렬한 예이다.
[root@host3 command]# sort -k 2 textfile2
5 five
5 five
4 four
4 four
1 one
1 one
3 three
3 three
2 two
2 two
[root@host3 command]#
다음은 두번째 필드를 기준으로 정렬한 다음 유일정렬을 한 예이다.
[root@host3 command]# sort -u -k 2 textfile2
5 five
4 four
1 one
3 three
2 two
[root@host3 command]#
이렇게 sort명령어는 다양한 방법으로 응용이 가능하며, 특히 위의 예와 같이 텍스트파일의 중복제거를 하면서 특정 필드를 기준으로 오름차순과 내림차순등으로 정렬하는 것은 리눅스에서 한번 할 수 있는 매우 강력한 방법이 될 수가 있다.
위의 해결책은 리눅스 명령이이네요
그런데 저의 문제점은 text file에 우선 field라는 개념이 없습니다.
예를들어 1 record의 길이가 2,000byte이면 900column 부터 906column까지를 기준으로 sort를 하려고 합니다.
Ultraedit를 사용하기도 하는데 file의 크기가 GB단위일때는 속도도 문제지만 sort가 안되는 경우도 있더군요
PC의 용량 문제인것도 같구요...
복잡한 워드문서등의 편집이 아닌 간단한 텍스트문서를 대상으로 정렬작업을 할때 주로 사용되는 명령어이다.
이 명령어는 주로 특정 DB나 프로그램, 또는 쉘프로그램등의 입력값으로 사용되는 데이터를 직접 정렬하려고 할때 사용된다.
사용형식
sort [OPTION]... [FILE]...
사용예 #1
textfile이라는 파일의 내용은 아래와 같다.
[root@host3 command]# cat textfile
4 one nine
7 eight two
6 four six
9 six four
2 three seven
3 seven three
0 five five
1 nine one
8 two eight
5 ten zero
[root@host3 command]#
이 데이터를 간단히 정렬하기 위하여 다음과 같이 "sort 파일명"이라고 하였다.
[root@host3 command]# sort textfile
0 five five
1 nine one
2 three seven
3 seven three
4 one nine
5 ten zero
6 four six
7 eight two
8 two eight
9 six four
[root@host3 command]#
위와 같이 "sort textfile"이라고 하면 textfile의 각 행의 첫번째 단어(필드)들의 첫번째 문자들을 알파벳 오름차순으로 정령을 한다.
첫번째 문자가 동일할 경우에는 동일한 첫번째 문자를 가진 행끼리 두번째 문자를 가지고 정렬하게 된다.
두번째 문자가 동일할 경우에는 세번째.........
이런식으로 비교를 하여 정렬하게 된다.
아무런 옵션없이 사용하면 위의 예와 같이 화면으로만 출력한다.
그렇다면 이 결과를 파일로 저장하려면 어떻게 할까?
사용예 #2
이번에는 위의 출력되는 결과를 특정 파일에 저장하는 방법을 알아보자.
[root@host3 command]# sort textfile > textfile_sort
[root@host3 command]#
[root@host3 command]# cat textfile_sort
0 five five
1 nine one
2 three seven
3 seven three
4 one nine
5 ten zero
6 four six
7 eight two
8 two eight
9 six four
[root@host3 command]#
위와 동일한 정렬을 하여 textfile_sort라는 파일에 결과를 저장하여 cat으로 결과파일을 확인한 것이다.
textfile_sort파일이 존재하지 않는다면 새로 만들어서 저장을 하게 된다.
그리고 textfile_sort파일이 이미 존재하는 파일이라면 기존의 파일내용은 모두 삭제되고 정렬결과만이 저장이 된다.
사용예 #3
이번에는 textfile을 내림차순(역순)으로 정렬을 해보자.
아래와 같이 -r옵션을 사용하면 오름차순이 아닌 내림차순으로 정렬을 해준다.
이 명령의 결과는 위의 "사용예 #1"과 정반대의 결과임을 알 수있다.
이 결과 또한 파일에 저장을 하려면 "> 파일명"을 명령어의 끝에 추가하여 실행하면 된다.
[root@host3 command]# sort -r textfile
9 six four
8 two eight
7 eight two
6 four six
5 ten zero
4 one nine
3 seven three
2 three seven
1 nine one
0 five five
[root@host3 command]#
위의 결과는 textfile의 각 행에 있는 첫번째 문자들을 내림차순(역순)으로 정렬을 한 것이다.
첫번째 문자가 동일할 경우에는 동일한 첫번째 문자를 가진 행끼리 두번째 문자를 가지고 정렬하게 된다.
두번째 문자가 동일할 경우에는 세번째.........
이런식으로 비교를 하여 정렬하게 된다.
사용예 #4
지금까지의 예는 모두 각 행의 첫번째 필드를 대상으로 정렬을 하였다.
그렇다면 첫번째 필드를 무시하고 각 행의 두번째 필드들만을 대상으로 정렬을 할 수는 없을까?
각 행의 두번째 필드들만을 대상으로 정렬을 하고자한다면 아래와 같이 -k옵션을 사용하면 된다.
즉, 지금까지의 예들은 모두 각 행의 첫번째 필드인 (각행의 숫자들, 0,1,2,....,9) 숫자를 대상으로 정렬을 하였다.
-k옵션을 사용하면 각행의 두번재 필드들을 대상으로 정렬을 하게 된다.
[root@host3 command]# sort -k 2 textfile
7 eight two
0 five five
6 four six
1 nine one
3 seven three
9 six four
5 ten zero
2 three seven
8 two eight
4 one nine
[root@host3 command]#
결과를 보면 각 행의 첫번째 필드는 무시되고 두번째 필드를 기준으로 오름차순 정렬이 된 것을 알 수 있다.
사용예 #5
이번에는 각 행의 두번째 필드들을 기준하여 내림차순(역순)정렬을 한 예이다.
[root@host3 command]# sort -r -k 2 textfile
4 one nine
8 two eight
2 three seven
5 ten zero
9 six four
3 seven three
1 nine one
6 four six
0 five five
7 eight two
[root@host3 command]#
위의 결과를 보면 첫번째 필드인 숫자들과는 무관하게 두번째 필드를 기준으로 내림차순 정렬이 된 것을 확인할 수 있다.
사용예 #6
이번에는 3번째 필드를 대상으로 오름차순 정렬을 한 것이다.
[root@host3 command]# sort -k 3 textfile
8 two eight
0 five five
9 six four
4 one nine
1 nine one
2 three seven
6 four six
3 seven three
7 eight two
5 ten zero
[root@host3 command]#
위의 결과를 보면 각행의 세번째 필드들을 기준으로 정렬이 되었음을 알 수 있다.
사용예 #7
이번에는 3번째 필드를 기준으로 내림차순(역순)정렬을 한 예이다.
[root@host3 command]# sort -r -k 3 textfile
5 ten zero
7 eight two
3 seven three
6 four six
2 three seven
1 nine one
4 one nine
9 six four
0 five five
8 two eight
[root@host3 command]#
사용예 #8
이번에는 textfile2라는 파일의 내용을 아래와 같이 가정하여 예를 들어 보겠다.
즉, textfile2라는 파일에는 아래와 같이 동일한 내용의 중복된 내용이 있다.
중복된 것은 몇개가 되든 하나로 유일하게 취급하여 정렬하고자 한다면 -u옵션을 사용한다.
다음은 textfile2의 내용이다.
[root@host3 command]# cat textfile2
3 three
3 three
4 four
4 four
1 one
1 one
5 five
5 five
2 two
2 two
[root@host3 command]#
이것을 아래와같이 일반적으로 정렬을 하면 다음과 같이 오름차순으로 정렬이 될 것이다.
[root@host3 command]# sort textfile2
1 one
1 one
2 two
2 two
3 three
3 three
4 four
4 four
5 five
5 five
[root@host3 command]#
위의 결과를 보면 동일한 내용이 중복되어 들어가 있는 것을 볼 수가 있다.
아래는 이런 중복된 행을 하나로 취급하여 유일하게 정렬을 한 것이다.
[root@host3 command]# sort -u textfile2
1 one
2 two
3 three
4 four
5 five
[root@host3 command]#
사용예 #9
이번에는 유일하게 정렬하면서 내림차순(역순)정렬을 함께 한 것이다.
[root@host3 command]# sort -u -r textfile2
5 five
4 four
3 three
2 two
1 one
[root@host3 command]#
유일정렬과 역순정렬을 함께한 결과가 위와 같다.
사용예 #10
이번에는 두번째 필드를 기준으로 정렬한 예이다.
[root@host3 command]# sort -k 2 textfile2
5 five
5 five
4 four
4 four
1 one
1 one
3 three
3 three
2 two
2 two
[root@host3 command]#
다음은 두번째 필드를 기준으로 정렬한 다음 유일정렬을 한 예이다.
[root@host3 command]# sort -u -k 2 textfile2
5 five
4 four
1 one
3 three
2 two
[root@host3 command]#
이렇게 sort명령어는 다양한 방법으로 응용이 가능하며, 특히 위의 예와 같이 텍스트파일의 중복제거를 하면서 특정 필드를 기준으로 오름차순과 내림차순등으로 정렬하는 것은 리눅스에서 한번 할 수 있는 매우 강력한 방법이 될 수가 있다.
저작권: 리눅스포털 (www.superuser.co.kr), 무단 재배포및 복사를 금합니다.
출처 : http://www.superuser.co.kr/superuserboard/view.html?id=34&code=linuxcom&start=50&position=