2016-10-19 3 views
1

임의의 값으로 XML을 생성하는 bash 스크립트를 만듭니다. 태그를 채우기 위해 사용하는 300,000 개가 넘는 라인이있는 txt 파일이 있습니다. 최대 50,000 개의 변수가 있으므로 임의의 데이터를 만들려면 30 만에서 충분하지만 매번 중복되는 경우가 있습니다. 50,000 개의 고유 변수를 선호합니다.중복되지 않은 파일에서 임의의 행을 읽습니다.

randomline=$(shuf -n 1 random.txt) 

중복을 방지 할 수있는 방법이 있나요 :

은 내가 TXT 파일에서 임의의 라인을 얻기 위해이 코드 조각을 사용합니까?

미리 감사드립니다.

+0

나는 shuf가 반복없이 난수를 생성한다고 생각했다. 'sort -R'을 사용할 수도 있습니다. – fedorqui

+1

아마'sort -uR random.txt의 결과를 저장한다. head -50000'을 스크립트 내의 배열에 저장하거나 파일을 저장하고 라인별로 파일을 읽으십시오. – Sundeep

답변

1

문제는 n 줄을 얻으려면 shuf 번이며, 항상 첫 번째 줄을 선택하십시오. 따라서 같은 줄을 여러 번 가져올 가능성이 있습니다.

파일에 중복 된 줄이 없다고 가정합니다. 한 번 shuf하고 결과를 임시 파일이나 메모리에 저장할 수 있습니다. 그리고 카운터를 설정하십시오. 임의의 라인을 선택할 때마다 라인 번호 == 카운터 값을 가진 라인을 읽습니다. 이후에 카운터를 늘리십시오. 따라서 고유 한 임의 선이 있습니다.

(당신이 메모리에 SHUF 결과를 저장하면, 그것은 즉, 스택으로 작동하게 읽고 (팝업) 라인을 제거 할 수 있습니다) 솔루션에 대한

+0

aaah 그게 전부입니다. 그래서 아마 'shuf -n 50000'이어야하고 그 출력에서 ​​하나씩 선택해야합니다. – fedorqui

0

감사합니다. 그것은 나를 궤도에 다시 잡았어. 나는이 방법을 구현 :

read "number of lines" number 
sort -uR ~/Data/random.txt | head -$number > random.dat 

와 대한 ... 루프 다음 ​​

: 나는, 최대 지금은 아무 중복을 경험하지 때까지 지금 그것을 테스트하고 있습니다

randomline=$(sed "${i}q;d" random.dat) 

! ;-)

관련 문제