행에 하나의 값이 있는 모든 행을 삭제하는 방법은 무엇입니까?

행에 하나의 값이 있는 모든 행을 삭제하는 방법은 무엇입니까?

다음과 같은 파일이 있습니다

input file
0.0  4  6  5  1  2  9  4  5  1  ..... 
0.25
0.5  3  1  
1.0  3  7  8  2  
1.5  3  3  3  4  6  4  5   
2.0  
2.5  6  7  6  9 

해당 행에 값이 하나만 있는 모든 행을 삭제하고 싶으므로 결과는 다음과 같습니다.

out file  
0.0  4  6  5  1  2  9  4  5  1  ..... 
0.5  3  1  
1.0  3  7  8  2  
1.5  3  3  3  4  6  4  5   
2.5  6  7  6  9 

답변1

이를 수행하는 한 가지 방법 awk은 NF(필드 수)를 사용하여 필드 수가 1보다 큰 행만 인쇄하는 것입니다.

awk <oldfile >newfile 'NF>1'

awk <oldfile >newfile 'NF>1'
cat newfile
0.0  4  6  5  1  2  9  4  5  1  .....
0.5  3  1
1.0  3  7  8  2
1.5  3  3  3  4  6  4  5
2.5  6  7  6  9

답변2

숫자가 두 개 이상인 경우 구분 기호가 하나 이상 있어야 합니다. 이것이 그렇다면 spacegrep은 다음과 같을 것입니다.

grep ' '

파일의 줄 끝에 추가 공백이 있을 수 있는 경우 공백 뒤에 숫자가 오는지 또는 .숫자가 가능한지 검색하세요 .25.

grep ' [0-9.]'

처음에 여분의 공백이 있을 수 있는 경우또는그런 다음 끝과 중간에 추가 공간이 있습니다.

grep '[0-9.]  *[0-9].'

답변3

이 작업을 수행하려면 grep 또는 sed를 사용할 수 있습니다.

그리고 sed:

sed -e '/^[[:space:]]*[[:digit:].]\+[[:space:]]*$/d' input >output

grep의 경우 -E정규식 옵션과 -v일치 항목을 제외하는 옵션을 사용합니다.

grep -v -E '^[[:space:]]*[[:digit:].]+[[:space:]]*$' input >output

이 패턴의 이유는숫자값을 지정하고 선행 또는 후행 공백이 있는 사례를 처리합니다. 이들 중 어느 것도 관심이 없다면 더 간단한 솔루션이 "작동"합니다.

관련 정보