sed 명령 도움말

sed 명령 도움말

sed1980년대에 출시된 모든 게임에 대한 정보를 검색하여 표시하고 결과를 알파벳순으로 정렬하는 명령이 필요합니다 . just를 사용하여 이를 수행할 수 있는 좋은 방법이 있습니까 sed?

1   Wii Sports                    Wii  2006  Nintendo            41.36
2   Super Mario Bros.             NES  1985  Nintendo            29.08
3   Duck Hunt                     NES  1985  Nintendo            26.93
4   Tetris                        GB   1989  Nintendo            23.20
5   Mario Kart Wii                Wii  2008  Nintendo            15.91
6   Wii Sports Resort             Wii  2009  Nintendo            15.61
7   Kinect Adventures!            X360 2010  MS Game Studios     15.09
8   New Super Mario Bros. Wii     Wii  2009  Nintendo            14.53
9   Wii Play                      Wii  2007  Nintendo            13.96
10  Super Mario World             SNES 1991  Nintendo            12.78
11  New Super Mario Bros.         DS   2006  Nintendo            11.28
12  Pokémon Red/Green/Blue        GB   1998  Nintendo            11.27
13  Super Mario Land              GB   1989  Nintendo            10.83
14  Call of Duty: Black Ops       X360 2010  Activision           9.76
15  Mario Kart DS                 DS   2005  Nintendo             9.71
16  Super Mario Bros. 3           NES  1990  Nintendo             9.54
17  Grand Theft Auto:San Andreas  PS2  2004  Rockstar Games       9.43
18  Call of Duty: Modern Warfare  X360 2011  Activision           9.07
19  Grand Theft Auto V            X360 2013  Rockstar Games       9.0

답변1

sedawk필요한 데이터를 추출하는 데 사용하는 것이 불가능하지는 않지만, 필드(열)로 구성된 레코드(행)로 정리할 수 있는 데이터를 다루는 데 더 적합하므로 불필요하게 복잡한 연습이 될 것입니다 . 어려운 점은 네 번째 열과 일치하는 정규식을 찾아낸 다음 그것이 올바른 범위의 정수인지 확인하는 것입니다. 정수를 계산하고 처리하는 데 능숙하지 않을 뿐만 아니라sed정렬할 때 짜증나.

데이터가 탭으로 구분되어 있다고 가정합니다("알파벳순"은 "사전순"을 의미함).

awk -F '\t' '$4 >= 1980 && $4 < 1990' file | sort -k 2

그러면 awk탭으로 구분된 네 번째 필드(연도)가 1980년에서 1989년 사이의 숫자인 행을 추출합니다. 그런 다음 결과 행은 공백으로 구분된 두 번째 필드(제목 및 행의 나머지 부분)에서 사전순으로 정렬됩니다.

파일이 공백으로 구분된 경우 탭 문자 대신 두 개 이상의 공백으로 구성된 임의의 순서를 구분 기호로 사용해 볼 수 있습니다.

awk -F ' {2,}' '$4 >= 1980 && $4 < 1990' file | sort -b -k 2

-b여기에서 사용된 옵션을 참고하세요 sort. 두 번째 필드의 선행 공백은 무시해야 합니다. 데이터의 구분 기호가 단일 탭 문자인 경우에는 필요하지 않습니다.

질문의 데이터에서 내가 얻은 것은

3   Duck Hunt                     NES  1985  Nintendo            26.93
2   Super Mario Bros.             NES  1985  Nintendo            29.08
13  Super Mario Land              GB   1989  Nintendo            10.83
4   Tetris                        GB   1989  Nintendo            23.20

답변2

이름을 기준으로 알파벳순으로 게임을 정렬하려면 해당 을 사용하면 됩니다 sort. 여기서는 #데이터 세트에 존재하지 않는 필드 구분 기호로 선택했습니다 .

하지만 먼저 1980년대 게임을 선택해야 하므로 grep다음과 같은 방법을 사용했습니다.

grep -E '^.{39}198.' games | sort -t'#' -k1.5,1.34

귀하의 예 출력 :

3   Duck Hunt                     NES  1985  Nintendo            26.93
2   Super Mario Bros.             NES  1985  Nintendo            29.08
13  Super Mario Land              GB   1989  Nintendo            10.83
4   Tetris                        GB   1989  Nintendo            23.20

관련 정보