cat -n text.txt
자동 행 번호 매기기를 사용하는 경우 이 명령을 사용하여 특정 번호가 매겨진 행만 표시하려면 어떻게 해야 합니까?
답변1
사용sed
용법
$ cat file
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
한 줄 인쇄(5)
$ sed -n 5p file
Line 5
여러 줄 인쇄(5 및 8)
$ sed -n -e 5p -e 8p file
Line 5
Line 8
특정 범위(5 - 8)를 인쇄합니다.
$ sed -n 5,8p file
Line 5
Line 6
Line 7
Line 8
기타 특정 라인의 인쇄 범위(5 - 8 및 10)
$ sed -n -e 5,8p -e 10p file
Line 5
Line 6
Line 7
Line 8
Line 10
답변2
한 가지 방법은 다음을 사용하는 것입니다 sed
.
cat -n text.txt | sed '11d'
여기서 11은 삭제하려는 줄 번호입니다.
또는 11을 제외한 모든 항목을 제거합니다.
cat -n text.txt | sed '11!d'
범위도 가능합니다:
cat -n text.txt | sed '9,12!d'
다음을 수행할 필요 도 없습니다 cat -n
.
sed '9,12!d' text.txt
답변3
awk를 직접 사용할 수 있습니다.
awk 'NR==1' file.txt
"1"을 원하는 줄 번호로 바꾸십시오.
답변4
다른 사람들이 보여줬듯이 cat -n
. 그러나 실제로 출력을 구문 분석 cat -n
하고 특정 줄(예: 4-8, 12 및 42)만 표시해야 하는 경우 다음을 수행할 수 있습니다.
$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42'
4 Line 4
5 Line 5
6 Line 6
7 Line 7
8 Line 8
12 Line 12
42 Line 42
in awk
은 $1
첫 번째 필드이므로 이 명령은 첫 번째 필드가 i) 4 ~ 8(포함) 또는 ii) 12 또는 iii) 42인 모든 행을 인쇄합니다.
cat -n
파일에서 원래 행을 가져오기 위해 추가된 필드도 제거하려는 경우 다음을 수행할 수 있습니다.
$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42{sub(/^\s*[0-9]+\s*/,""); print}'
Line 4
Line 5
Line 6
Line 7
Line 8
Line 12
Line 42