![열이 23개 미만인 행 제외](https://linux55.com/image/96848/%EC%97%B4%EC%9D%B4%2023%EA%B0%9C%20%EB%AF%B8%EB%A7%8C%EC%9D%B8%20%ED%96%89%20%EC%A0%9C%EC%99%B8.png)
파일에서 열이 23개 미만인 일부 행을 삭제(출력에서 제외)하고 싶습니다. 예를 들어:
BR1009298 338 1685 5839 1986 21111995 1 1 1 0 20032001 954 31266 1 1 4 5 205 95 27 3 2 BR1009298
BR1009304 339 5835 5797 1986 23011996 0 1 1 0 5081997 961 11189 3 1 3 4 1007 96 28 3 3 BR1009304
BR1009306 340 1578 0 1986 4041997 0 1 1 0 15081997 972 11189 9 1 9 9 501 97 42 3 0
BR1009309 112180 5910 5791 1986 9011996 1 1 1 0 22111999 961 5445 5 1 1 1 1007 96 28 3 4 BR1009309
행 3에는 열이 22개뿐이므로 삭제하고 싶습니다. 이는 대용량 파일이므로 23개 열을 포함하지 않는 모든 행을 삭제해야 합니다.
어떻게 해야 하나요?
답변1
이 시도:
awk 'NF >= 23' file
답변2
perl -ane 'if ($#F >= 22) { print }' < t
여기에는 t
입력 데이터가 포함되어 있습니다.
Perl에서는 배열 인덱싱이 0부터 시작하므로 22라는 점에 유의하세요.
답변3
그리고 좋은 시간 보내세요 grep
:
grep -E '(\s+\S+){22}' file.txt
답변4
사용행복하다(이전의 Perl6)
~$ raku -ne '.put if .words >= 23;' file > tmp
Raku의 words
루틴은 공백을 기준으로 분할되어 원하는 수의 열을 제공합니다. 열 수가 23보다 크거나 같으면 $_.put
해당 행이 출력됩니다.
참고 .put
로 의 약어 입니다 $_.put
. $_
Raku/Perl "주제 변수"는 이 경우 연속 입력 라인입니다.
참고: 출력을 새 파일로 리디렉션하는 경우, 예를 들어 tmp
Raku에는 파일을 "현재 위치"로 편집하기 위한 플래그가 없습니다 -i
(실제로는 없을 것입니다).