파일에서 일부 열을 추출하여 다른 파일에 붙여넣고 싶습니다. 나는 현재 다음을 사용하고 있습니다 :
cat $Input_file | cut -f$Var_ColumnNo1,$Var_ColumnNo2,$Var_ColumnNo1 -d"," > $OUTPUT_file
하지만 이 명령은 대용량 파일에서 많은 시간이 걸리며(예를 들어 50MB 파일의 경우 약 2초 소요) 이 명령을 여러 번 실행해야 하므로 스크립트 속도가 매우 느려집니다.
이를 수행하는 효율적인 방법이 있습니까?
답변1
정확히는 아닙니다. cut
이것이 거의 확실하게 가장 빠른 방법입니다. 나는 157M 파일에서 몇 가지 대안을 테스트했는데 cut
가장 빠른 것 같습니다(여기서는 필요하지 않습니다 cat
).
$ time cut -f 2,6,8 -d ',' file > /dev/null
real 0m0.859s
user 0m0.803s
sys 0m0.053s
$ time awk -F, '{print $2,$6,$8}' file > /dev/null
real 0m5.442s
user 0m5.317s
sys 0m0.050s
$ time perl -F, -lane 'print "@F[1,5,7]"' file > /dev/null
real 0m6.065s
user 0m5.943s
sys 0m0.070s
작업 속도를 높이려면 스크립트가 수행하는 작업을 변경해야 합니다. 입력 파일의 예를 포함하고 최종 목표가 무엇인지 설명하는 다른 질문을 하는 것이 좋습니다. "이 작업을 여러 번 실행해야 하는 경우" 거의 확실히 잘못된 작업을 수행하고 있는 것입니다. 가능하면 입력 파일을 한 번만 읽어야 합니다.