다음과 같은 여러 줄이 포함된 파일이 있습니다.
브랜드, 모델, 인치, 가격
dell xps 13 9000
macbook pro 13 13000
asus zenbook 13 10500
가격이 10,000을 초과하는 행을 삭제하고 싶습니다. grep을 사용할 수 있나요?
답변1
다음 명령을 사용하여 가격이 10000보다 큰 행을 가져올 수 있습니다.
$ grep -E '.* [0]*[1-9][0-9]{4,}$' file.txt
macbook pro 13 13000
asus zenbook 13 10500
이 줄을 제거하려면 다음을 추가하십시오 -v
.
$ grep -vE '.* [0]*[1-9][0-9]{4,}$' file.txt
dell xps 13 9000
.*
가격이 포함된 마지막 열 앞의 모든 문자와 일치합니다.[1-9]
가격의 첫 번째 숫자와 일치합니다[0-9]{4,}$
첫 번째 숫자 다음에 4개 이상의 숫자가 일치하므로 총 5개의 숫자가 있습니다. 즉 10000 이상을 의미합니다.
답변2
가능하지만 grep
숫자 대신 문자열에 대해 작동하는 정규식을 사용합니다.
grep -v '[0-9]\{5\}$' input.txt
-v
일치하는 줄을 삭제합니다. 이전 콘텐츠가 n번 반복되었음을 나타내는 [0-9]
임의의 숫자와 일치합니다 \{n\}
(이 예에서는 5번, 즉 10,000번 이상). $
줄의 끝과 일치합니다.
awk
숫자를 비교할 수 있으므로 작업에 더 적합합니다.
awk '$4<10000{print}' input.txt
또는 펄:
perl -ane 'print if $F[-1] < 10000' input.txt
답변3
예제 입력을 고려하면 다음과 같습니다.
$ cat /tmp/foo
dell xps 13 9000
macbook pro 13 13000
asus zenbook 13 10500
awk를 사용할 수 있습니다.
$ awk '{ if ($4 <= 10000) print; }' /tmp/foo
dell xps 13 9000
답변4
노력하다
cp input.txt original.txt
awk 'NR==1 || $4 < 10000 ' original.txt > input.txt
어디
- 조건 NR==1은 헤더 행을 유지합니다.