고양이와 함께 이상한 줄만 표시


27

안녕,

아마도 이것은 매우 쉬운 일이지만 지금은 요점을 알지 못합니다. Linux에서 쉘에 텍스트 파일이 있으면 cat filename과 같은 방법으로 첫 번째 줄, 세 번째 줄, 5, 7, 9 등 만 볼 수 있습니까?

고양이가 아니라면 다른 명령으로

감사

bash 

답변:


40

사용 awk:awk 'NR % 2 == 0' filename

편집 : {print}ghostdog74의 답변에 표시된대로 Roberto Bonvallet이 댓글을 달았습니다.


1
{print}기본 동작이므로 awk 'NR % 2 == 0' < myfile충분합니다.

3
@roberto, 입력 리디렉션이 필요하지 않습니다.
user31894

1
참고로, 짝수 줄 (첫 번째 줄이 1 인 경우)과 홀수 줄 (첫 번째 줄을 0으로 생각하는 경우)이 표시됩니다. 교체 2 == 02 == 1반대합니다.
cde

13

아니면 같은

sed -n 'p;n' filename

설명을 보려면 맨 페이지를 찾아보십시오 sed.


이것은 sed내 마음을 미끄러 뜨린 휴대용 버전입니다.
Chris Johnsen

1
sed -n '1d;p;n'예를 들어 짝수 라인을 위해 선을 쉽게 건너 뛸 수 있습니다.
kisp

7

sed를 사용하십시오 :

sed -n 1~2p filename

1
이것은 GNU 확장입니다. GNU sed가 기본값이 아닌 시스템에서는 작동하지 않을 수 있습니다 .
Chris Johnsen

사실이지만 대부분의 Linux 버전에서 작동해야합니다.

흠 .. 방금 "sed --posix -n 1 ~ 2p filename"을 시도했는데 제대로 작동하는 것 같습니다. --posix는 gnu 확장에 대한 지원을 제거해야합니다.

GNU sed매뉴얼 gnu.org/software/sed/manual/html_node/Addresses.html#Addresses 는“first ~ step This GNU extension…”이라고 말합니다. 언급하지 않습니다 --posix. gsed --posix -n 1~2p(GNU sed 4.2.1)을 시도 하면 gsed: -e expression #1, char 2: unknown command: ‘~’.
Chris Johnsen

알겠습니다. 내 sed에 무슨 문제가 있는지 모르겠다. cygwin을 사용하고 있으므로 관련이있을 수 있습니다.


2

awk로 할 수있는 2 가지 방법

$ awk '{getline;print}' file # the equivalent of the selected sed answer
$ awk 'NR%2==0' file

또는 껍질만으로

i=1; while read -r line; do [ $((i++ % 2)) -eq 0 ] && echo $line; done <"file"


0

이것을 테스트하지는 않았지만 (Mac OS X에서는 작동하지 않는 것 같지만) GNU sed는 first~step주소 선택으로 지원합니다 .

sed -n 1~2p file

첫 번째 줄에서 시작하여 그 후 다른 모든 줄을 인쇄합니다.


맞습니다. 이것은 GNU 확장입니다. Mac OS X은 sed기본 설치에서 BSD 를 사용 합니다.
Chris Johnsen


-2

이 명령을 사용하여 결과를 요구할 수 있습니다

awk 'NR % 2 == 1'

sed -ne '1 ~ 2p'


2
-1. 이것은 거의 10 년 전의 답변을 복제하지만 사소한 차이점은 전혀 설명되지 않습니다. 왜 ls -l여기에 있습니까?
Kamil Maciorowski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.