![csv 파일의 일치하는 셀과 행의 인덱스를 Grep합니다.](https://linux55.com/image/59722/csv%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EC%85%80%EA%B3%BC%20%ED%96%89%EC%9D%98%20%EC%9D%B8%EB%8D%B1%EC%8A%A4%EB%A5%BC%20Grep%ED%95%A9%EB%8B%88%EB%8B%A4..png)
0.99
나는 csv 파일을 가지고 있으며 행 인덱스, 즉 행의 첫 번째 셀로 시작하는 숫자를 보고 싶습니다 .
이것이 내가 지금까지 가지고 있는 것입니다:
cat fil.csv | grep '0\\.99'| tee > (cut -d, -f1) | tr , \\n | grep '0\\.99'
입력하다:
id, f1,f2,f3
f1,0.54,0.12,0.432
f2,0.1231,0.99999,0.99832
f3,0.121,nan,0.12321
f4,0.99712,0.121,0.434
원하는 출력: 이상적으로는 이것이 좋겠지만 oneliner에는 너무 복잡합니다.
f2,0.99999,0.99832
f4,0.99712
이 문제를 해결할 수 있습니다. 이것이 제가 작성한 명령에서 원하는 것입니다.
f2
0.99999
0.99832
f4
0.99712
답변1
awk를 사용하세요:
$ awk -F, '$0~"0\\.99*"{printf $1;for(i=1;i<=NF;i++){if($i~"0\\.99*"){printf ","$i}};printf "\n"}'
f2,0.99999,0.99832
f4,0.99712
더 읽기 쉬운 형태로:
$ awk -F, '
$0~"0\\.99*"{
printf $1
for(i=1; i<=NF; i++){
if($i~"0\\.99*"){
printf ","$i
}
}
printf "\n"
}
'
답변2
사용할 수 있는 경우 perl
:
$ perl -F, -anle '
BEGIN { $, = "," }
@h = grep { /^0\.99/ } @F;
print $F[0], @h if @h;
' file
f2,0.99999,0.99832
f4,0.99712