Linux에 2개의 열이 있는 파일이 있는데 첫 번째 열에는 IP 주소가 있고 두 번째 열에는 포트 번호가 있습니다.
IP 주소와 함께 홀수 포트 번호만 나열하고 싶습니다.
답변1
다음 awk
줄에서는 결과를 얻으려면 하나의 명령만 필요합니다.
awk '$2%2!=0 {print $0}' file.txt
홀수 포트 번호와 해당 IP 주소를 표시해야 하므로 결과가 0이 아니면 열 2 번호를 2로 나누면 됩니다.
답변2
파일이 탭으로 구분되어 있다고 가정합니다(tsv).
cut -f 2 abcd.txt | egrep '[13579]$'
그러면 문제가 해결될 것입니다.
다른 구분 기호나 고정 너비를 사용하는 경우 man cut
(특히 -d
및 -c
옵션)을 참조하세요.
보너스: | uniq
중복을 제거하려면 추가하세요.
편집하다:cut
IP 주소를 삭제하지 않으려면 이 섹션을 무시하십시오.egrep '[13579]$' abcd.txt
편집하다:설명을 추가하세요
cut
라인별로 작동하고 출력하려는 라인 부분을 선택할 수 있는 유틸리티입니다.
옵션을 사용하여 문자 위치로 지정하거나 -c
(고정 길이 필드에 유용함) 필드 지정을 사용할 수 있습니다 -f
(데이터가 필드로 구분된 경우).
필드 구분 기호를 사용하는 경우 -f
문자로 가정하거나 를 사용하여 다른 문자를 지정할 수 있습니다 -d
.
echo -e 'abcdefghij\nabcdefghij' # two lines
echo -e 'abcdefghij\nabcdefghij' | cut -c 2-4,7 # selects characters from position 2 to 4 and 7
echo -e 'aa,bb,cc,dd\nAA,BB,CC,DD' # space-delimited fields
echo -e 'aa,bb,cc,dd\nAA,BB,CC,DD' | cut -d , -f 3 # prints only the 3rd field
egrep
(와 동일 grep -e
) 주어진 내용과 일치하는 행을 선택합니다.정규식. 표현의 [13579]$
뜻은줄 끝에 홀수 숫자가 있습니다.이므로 egrep
홀수로 끝나는 줄만 표시됩니다.
정규식은 텍스트를 조작할 때 예쁘고 유용하므로 많은 명령줄 유틸리티, 텍스트 편집기 및 프로그래밍 언어에서 찾을 수 있습니다. 처음에는 신비해 보일 수 있지만 실제로 전문가가 될 필요는 없습니다. 대부분의 작업에서는 주제에 대해 조금 읽고 실험해 보면 주제의 요점을 빠르게 이해할 수 있습니다.
편집하다:@HaukeLaging에서 제안한대로 (1|3|5|7|9)$
다음으로 교체하십시오.[13579]$