열이 23개 미만인 행 제외

열이 23개 미만인 행 제외

파일에서 열이 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 "주제 변수"는 이 경우 연속 입력 라인입니다.

참고: 출력을 새 파일로 리디렉션하는 경우, 예를 들어 tmpRaku에는 파일을 "현재 위치"로 편집하기 위한 플래그가 없습니다 -i(실제로는 없을 것입니다).

https://raku.org

관련 정보