반응형

출처 : https://stackoverflow.com/questions/29244351/how-to-sort-a-file-in-place/29244387

파일 자체를 정렬하는 방법

sort file 명령을 사용할 때, 파일의 내용을 정렬하여 보여줍니다. 어떤 종류의 출력이 아니라 정렬된 파일을 원하는 데 어떻게 해야 합니까?


7개 답변 중 1개

당신은 정렬된 출력으로 파일 redirection을 사용할 수 있습니다.

sort input-file > output_file
sort 입력파일 > 출력파일

아니면 당신은 -o, --output=FILE 옵션을 같은 입력과 출력 파일을 가리키며 정렬하여 사용할 수 있습니다.

sort -o file file
sort -o 파일 파일

파일 이름을 반복하지 않고 ( bash 중괄호 확장 으로 )

sort -o file{,}
sort -o 파일{,}

참고: 일반적인 실수는 출력을 동일한 입력 파일로 redirect 하는 것입니다(예: sort file > file). 이것은 쉘이 redirection(sort(1) 프로그램이 아님)을 하고 있기 때문에 작동하지 않으며, sort(1) 프로그램에 읽을 기회를 주기 직전에 입력 파일(출력이기도 함)이 지워집니다.

반응형
반응형

출처 : http://serverfault.com/questions/62411/how-can-i-sort-du-h-output-by-size

크기로 du -h의 출력을 정렬할 수 있나요?

저는 du 출력을 사람이 읽을 수 있는 목록으로 얻고 싶습니다.

하지만, du는 "크기로 정렬"이란 옵션이 없기 때문에 sort로 pipe하는 것은 사람이 읽을 수 있도록 하는 플래그(human readable flag)가 작동하지 않습니다.

예를 들어 다음 명령을 실행하면

du | sort -n -r 

(내림차순으로) 크기로 정렬된 디스크 사용량이 출력됩니다.

du |sort -n -r
65108   .
61508   ./dir3
2056    ./dir4
1032    ./dir1
508     ./dir2

하지만, 사람이 읽을 수 있도록 하는 플래그(human readable flag)를 사용하여 실행하면 적절하게 정렬되지 않습니다.

du -h | sort -n -r
508K    ./dir2
64M     .
61M     ./dir3
2.1M    ./dir4
1.1M    ./dir1

크기로 du -h를 정렬하는 방법을 아시는 분이 계신가요?


39 개의 답변 중 1개의 답변

2009년 8월에 GNU coreutils 7.5 가 나오고 부터, du -h와 같은 종류의 접미사를 사용하는 -h 파라미터를 sort에서 쓸 수 있습니다.

du -hs * | sort -h

만약 -h를 지원하지 않는 sort를 사용하신다면, GNU Coreutils를 설치할 수 있습니다. 다음은 오래된 Mac OS X 입니다.

brew install coreutils
du -hs * | gsort -h

다음은 sort 매뉴얼 내용입니다.

-h, --human-numeric-sort 사람이 읽을 수 있는 숫자를 비교한다 (예시, 2K 1G)

반응형
반응형

출처 : http://stackoverflow.com/questions/9001509/how-can-i-sort-a-dictionary-by-key

키로 dictionary를 어떻게 정렬할 수 있습니까?

{2:3, 1:89, 4:5, 3:3}{1:89, 2:3, 3:3, 4:5}로 만드는 좋은 방법에는 무엇이 있습니까? 저는 몇 개의 글을 검사했는데 그들 모두 튜플을 리턴하는 "sorted" 연산자를 사용하였습니다.


30 개의 답변 중 1개의 답변만 추려냄.

표준 파이썬 dictionary들은 정렬되지 않습니다. (key, value) 쌍으로 정렬할 지라도 순서를 보전하면서 dict의 내용을 보관할 수는 없습니다.

가장 쉬운 방법은 값(element)이 추가되는 순서를 기억하는 OrderedDict를 사용하는 것입니다.

In [1]: import collections
In [2]: d = {2:3, 1:89, 4:5, 3:0}
In [3]: od = collections.OrderedDict(sorted(d.items()))
In [4]: od
Out[4]: OrderedDict([(1, 89), (2, 3), (3, 0), (4, 5)])

od가 출력하는 방법은 신경쓰지 않아도 됩니다. 예상한대로 작동합니다.

In [11]: od[1]
Out[11]: 89

In [12]: od[3]
Out[12]: 0

In [13]: for k, v in od.iteritems(): print k, v
   ....: 
1 89
2 3
3 0
4 5

Python 3

Python3 사용자는 .iteritems() 대신에 .items()을 사용해야 합니다.

In [13]: for k, v in od.items(): print(k, v)
   ....: 
1 89
2 3
3 0
4 5
반응형
반응형

출처: 지식IN(edson)

http://cafe.naver.com/devctrl.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=3272




__attribute__는 GCC 컴파일러에 있는 메커니즘으로 컴파일러에게 추가적인 에러 체킹같은 것을 하도록 지시하는 것이다.

 

형식 : __attribute__ (x)

 

괄호 안의 x에는 가능한 몇 가지들이 있다. 특히, packed는 채우라는 의미이다.

 

typedef struct

{

    char a;

    int b;

} myST;

 

위 구조체의 sizeof(myST)는 8이다.

상식적으로, char =1byte, int = 4byte이므로, 5가 나와야 하는데.. 이런 문제때문에, 구조체를 가지고 작업할 경우 예상치 못한 버그로 고생을 가끔한다.

이런 현상이 생기는 이유는, 현재 사용하는 컴퓨터는 32비트이다. 즉, CPU가 메모리 어드레스를 지정할 때 4바이트(32비트/8) 단위가 내부적으로 가장 최적화되어 빠른 데이터 접근을 가능하게 한다. 4바이트 배수 단위가 아닌 경우 당연히 접근은 가능하지만 속도 차이가 있어, 디폴트로 저런 접근을 하도록 해 둔 것이다. 

 

그럼, 메모리에 저 구조체가 잡힐 경우 어떻게 존재하느냐는, 4바이트 단위로 채워지기 때문에, char a;는 1바이트이지만, 4바이트를 할당해서 거기다 char a;를 담아둔다. 다음, int b;는 4바이트므로 그냥 4바이트를 할당한다. 이렇게 해서 8바이트의 크기가 필요한 것이다. 

 

첫 char a;에서 1바이트를 제외한 나머지 3바이트는 어떤 걸로 채워질까? 의미없는 값이 채워진다. 그냥 공간만 예약되는 것이다.

그래서, 이런 현상을 방지할 수 있도록, 컴파일러는 __attribute__ ((packed)) 메커니즘을 두어서 우리가 예상한 1바이트+4바이트, 크기가 되도록 빌드한다. 

 

typedef struct

{

    char a;

    int b;

} __attribute__ ((packed)) myST;

 

결국, 위 처럼 사용하게되면, 컴파일러는 구조체 멤버 실제 크기 만큼 할당한다. 그래서 정확한 5바이트가 나오게된다. 물론, 속도는 약간 더 늦어진다. 

 

여기에서 __attribute__라는 의미는 , 컴파일러에게 특성을 주겠다는 것을 의미하며 괄호 안은 여러 가지가 가능한데, 여기서는 그 중 한가지인 구조체 정렬을 사용하겠다는 의미인 packed를 사용했다.

 

packed의 의미는 꽉 채우다라는 것인데,  이 기능을 사용하지 않았을 경우 char a;는 실제 1바이트 외에 나머지 3바이트가 자리만 차지한 채 남아있다. 이런 비어있는 것들을 제거해서 구조체 멤버들이 빈 자리없이 꽉 채우라는 단어 의미이다. 이런 것을 구조체 정렬(alignment)이라고 한다. 

 

위는 unix/linux의 GCC에서 사용하는 것이고 윈도우 상의 비주얼 씨의 경우는

#pragma pack(1)

처럼 사용한다. 괄호 안의 의미는 1바이트 단위까지 체크해서 빈 자리없도록 차곡차곡 채우라는 것이다. 4가 올수도 있겠지만, 그렇게 되면 가장 작은 단위가 4가되어 char 형 같은 경우 역시 4로 채워지게 되어 낭패이다. 따라서 확실한 경우 아니면, 위 처럼 사용하면 된다.

 


반응형

'도움받은 정보' 카테고리의 다른 글

숨김파일 표시 안될 때  (0) 2010.03.23
고속도로와 소방서  (0) 2010.03.19
윈도우XP 최적화 팁 모음  (0) 2009.07.28
Virtualbox could not create temporary directory.  (0) 2009.07.28
네로 서치 제거법  (0) 2009.07.28

+ Recent posts