파일에 쓰지 않고 일반 텍스트 출력 로드

파일에 쓰지 않고 일반 텍스트 출력 로드

4개의 일반 텍스트 파일을 생성하는 프로그램(터미널에서 실행)이 있습니다.

예를 들어

./myprog

생성하다 file1.dat, file2.dat, file3.dat, file4.dat.

myprog이 4개의 "파일 출력"을 실행하고 로드(읽기)할 수 있지만 실제 파일에 쓸 수는 없는(아마도 파일을 메모리에 로드할 수도 있음) 스크립트를 만들고 싶습니다 . 가능합니까?

그 이유는 이 파일이 약 70000개가 필요하기 때문에 추가 파일을 저장하는 데 시간을 낭비하고 싶지 않고 이 정보만 사용하면 되기 때문입니다.

===============================================

댓글로 구체적인 사례를 물어보세요

  1. 삼각법 소프트웨어(C로 작성된 수치 미적분학 그리드 생성을 위한 무료 소프트웨어) 파일을 읽으려면 mesh.poly:

:

4 2 0 1
1   0     0     20
2   1     0     20
3   1     1     10
4   0     1     10

4 1
1 1 2   20 # bottom side
2 2 3   20 # right side
3 3 4   10 # top side
4 4 1   20 # left side

0

1
1 0.5 0.5 1 0.0005
  1. 이 명령은 triangle mesh.poly다음 파일을 생성합니다.

mesh.node:

4  2  0  1
   1    0  0    20
   2    1  0    20
   3    1  1    10
   4    0  1    10

그리고mesh.ele

2  3  0
   1       4     1     2
   2       2     3     4

그리고 다른 두 개의 파일로 총 4개의 출력 파일이 있습니다.

  1. *.node이 파일을 생성한 후 Fortran에 작성한 다른 프로그램에서 필요한 정보 와 정보를 사용해야 합니다 *.ele. 나는 .sh이것을 자동화하기 위해 파일을 작성할 생각이지만 Python이나 실행 가능한 프로그램을 실행할 수 있는 모든 언어를 사용할 수 있습니다.

로딩(읽기) mesh.nodemesh.ele쉽습니다. 하지만 triangleFortran 코드에 대한 출력 및 입력으로 수천 개의 실제 파일을 생성해야 합니다 . 때문에,"더미 파일 쓰기" 방법을 찾고 있습니다.이것이 더 효율적이고 깨끗할 것이라고 생각했습니다.

내 질문예, 70000x4 출력을 생성하는 약 70000개의 파일이 있습니다 mesh.poly(극소수).

답변1

aa를 사용할 수 있습니다.메모리 기반 파일 시스템(tmpfs), 또는FIFO(명명된 파이프)

배포판에 이미 tmpfs지원되는 마운트 지점이 어딘가에 설정되어 있을 수도 있습니다. 모든 임시 파일에 사용할 수 있습니다. (예: /tmp/일부 시스템 및 구성에서)

내 시스템에서는 기본적으로 /run/user/1000 아래에 충분히 큰 tmpfs가 있는데, 이는 지정한 <300MiB에 적합합니다.

머신의 루트라면 어딘가에 새 머신을 설치하여 사용할 수 있습니다.

실패: 일반 사용자로서 4개의 명명된 파이프를 설정하고 mkfifo이를 "임시 저장 영역"으로 사용할 수 있습니다.

그러면 알고리즘은 다음과 같은 의사 코드 줄을 사용할 수 있습니다.

make_4_fifos_with_mkfifo
foreach polyfile in directory do
  rename_fifos_to_use_given_prefix $polyfile
  run triangle $polyfile
  run fortranCMD polyfile.node $polyfile.ele ...
done

위 코드는 시스템에서 사용 가능한 다양한 스크립트 언어 중 하나를 사용하여 구현할 수 있습니다. 당신이 편안하다고 느끼는 것을 선택하십시오.

답변2

쉽습니다. Perl이나 tcl로 스크립트를 작성할 수 있습니다. 다음은 tcl의 예입니다.

set fp [open "somefile" r]
set file_data [read $fp]
close $fp

set data [split $file_data "\n"]
foreach line $data {
     # do some line processing here
}

이 예에서 somefile은 파일 이름이고 내용은 file_data 변수에 복사됩니다.

더 많은 정보를 알고 싶다면http://wiki.tcl.tk/367

관련 정보