저는 오랫동안 가지고있는 일부 CSV 파일을 필터링하려고했습니다. 내 스크립트가 왜 작동하지 않는지 알 수 없기 때문에 거의 직접 해보았습니다. 너희들이 내가 뭘 잘못하고 있는지 알아낼 수 있기를 바란다.1보다 작은 필드를 바꾼 다음 1보다 큰 값으로 행을 필터링하십시오.
나는 다음과 같은 파일이 : csv file
나는 다음과 같은 나오지도 스크립트를 사용하여 1보다 작은 값을 대체 할 수 있어요: 다음 단계에서
sed -e 's/[0][0-9]*\.[0-9]*/0/g' genes.csv > genes-filtered1.csv
을 내가 모두 제거 할 것인지를 모두 0 인 행 그러나 적어도 하나의 열에 1보다 큰 값이 있으면 계속 유지하려고합니다. 여러 스크립트를 시도했지만 작동하지 않습니다.
여기에 그들 중 일부입니다 :
awk '{ if ($2 > 1 || $3 > 1 || $4 > 1 || $5 > 1 || $6 > 1 || $7 > 1 || $8 > 1 || $9 > 1 || $10 > 1 || $11 > 1 || $12 > 1 || $13 > 1) print $0 }' genes-filtered1.csv > genes-filtered2.csv
또는 하나의 열을 사용하여 임계 값을 기준으로 필터링하려고 : 나는 또한 시도
threshold=1
awk -v threshold=$threshold '$3 > threshold' genes-filtered1.csv > genes-filtered2.csv
:
awk '{ for (i=2; i<=NF; i++) { if ($i != 0) { print; next } } }' genes-filtered1.csv > genes-filtered2.csv
마지막으로 나는 시도했다 :
awk '{for (i=2;i<=NF;i++) if ($i>=1){print $0;next}}' genes-filtered1.csv > genes-filtered2.csv
출력 파일이 비어 있거나 원본 파일과 동일하지 않은 것이 문제입니다. 어떤 제안이든 그것을 고칠 수있는 방법을 고맙게 생각합니다. 또한 sed 명령으로 awk 명령을 수행 한 다음 모두 0으로 줄을 제거 할 수 있습니까? 감사합니다.
고맙습니다. 처음에는 작동하지 않았습니다. 그러나 문제는 내 파일 내에있었습니다. @jaypal이 아래에서 말한 것을 한 후에 (dos2unix 사용) 작동한다. 고맙습니다. – degopwn
@degopwn이 솔루션을 사용하고 받아 들여야합니다. 나는 테스트를하지 않았지만 일단 성능 향상을 한 번 줄을 반복하기 때문에 더 효율적이라고 확신합니다. –