2012-01-30 2 views
0

제게 약간의 데이터 파일을 조작하는 멋진 스크립트가 있습니다. 처음에는 첫 번째 세미콜론 다음에 원하지 않는 데이터를 제거한 다음 데이터를 유니 코드로 변경합니다 문자열을 입력 한 다음 개행 문자를 제거하고 마지막으로 두 개의 혼합 파일 (a 및 b)을 사용하기 위해 셔플 링합니다.sed로 인해 컴퓨터가 멈추는 경우가 발생했습니다.

작은 파일에서도 아름답게 작동하지만 지금은 너무 커서 sed가 걸려있는 파일을 다루고 있습니다. 아니면 그게 무슨 일이야 ... 나는 정확히 모르겠다. 거기에 누군가가 (어쩌면?) 버퍼 또는 교수형에서 그것을 방지하기위한 제안을 제공 할 수 있습니까? (저는 16GB 램을 가지고 있고 그 파일은 ... 1707772 (k? 저는 "ls -la"ing입니다 ... 너무 큽니까?) 결코 사라지지 않을 100 % cpu 사용법을보고 있습니다. 프로세스를 죽이는 것만으로 창을 사용할 수있게됩니다. 일체의 제안

#!/bin/bash 
a="a"; 
b="b"; 
echo "Input Filename:"; 
read ifilename; 
echo "Output Filename:"; 
read ofilename; 
awk '{ 
    #dbg print "$0=" $0 
    sub(/;.*$/, "") 
    len=length($0) 
    if (len == 4) {print "&#x0" $0 ";"} 
    else if (len == 5) {print "&#x" $0 ";"} 
    else {print "error in input: found len=" len " in XX" $0 "xx"} 
}' /home/myhome/$ifilename > temp.txt; 
cat temp.txt | tr -d "\n" > temp_nolfs.txt; 
cat temp_nolfs.txt | sed -r 's/(.[^;]*;)/ \1 /g' | tr " " "\n" | shuf | tr -d "\n" > $ofilename$a".txt"; 
cat temp_nolfs.txt | sed -r 's/(.[^;]*;)/ \1 /g' | tr " " "\n" | shuf | tr -d "\n" > $ofilename$b".txt"; 
rm temp.txt; 
rm temp_nolfs.txt; 
echo "Done!"; 

감사 :

여기에 코드입니다!

+1

얼마나 오랫동안 기다리고 계십니까? –

+0

팁 : ls -al 대신 ls -lah, h를 사용하여 사람이 읽을 수 있도록하십시오. 어떤 행에 매달릴 수 있습니까? – ustun

+0

위에서 말했듯이, 나는 그것이 멈추는 곳을보기 위해 몇몇 echo 문을 넣는 것을 제안한다. 독립 실행 형 awk 명령을 사용할 수 있습니까? – octopusgrabbus

답변

1

많은 도움을 주신 것에 대해 감사드립니다. 그러나 문제는 전혀 제기되지 않았습니다. 나는 세미콜론없이 데이터를 보내고 있었기 때문에 존재하지 않는 것을 영원히 찾고있었습니다. 일단 제대로 구조화 된 데이터를 입력하면, 잘 작동하고 중복에도 불구하고 작동합니다.

2

스크립트에 심각한 리팩토링이 필요합니다.

  • cat temp_nolfs.txt | sed ... 쉽게 AWK의 처리 및/또는
  • 은 -i이 될 수 나오지도 나오지 될 수 trsed temp_nolfs.txt ...
  • 모든 통화가 될 수 있습니다 : 그것은 쉽게 예를 줄일 수있다 파이프를 사용하여 많은 중복 명령을 가지고 임시 파일의 생성을 제거하기 위해 사용
  • 등 등 그게 내가 스크립트가 큰 파일을 처리하는 것이 더 효율적이 될 것이라 확신합니다 완료되면

.

+0

동의 함. OP가 샘플 입력과 원하는 출력을 나타내면 OP는 훨씬 더 효율적인 솔루션을 제공합니다. – galaxywatcher

관련 문제