다음과 같은 파일이 있습니다
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
숫자가 두 개 이상인 경우 구분 기호가 하나 이상 있어야 합니다. 이것이 그렇다면 space
grep은 다음과 같을 것입니다.
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
이 패턴의 이유는숫자값을 지정하고 선행 또는 후행 공백이 있는 사례를 처리합니다. 이들 중 어느 것도 관심이 없다면 더 간단한 솔루션이 "작동"합니다.