배경 :CSV
로그 파일을 생성하는 데 사용하는 상당히 간단한 bash
스크립트가 있습니다. 해당 bash 스크립트의 일부로 네트워크상의 다른 장치를 netcat
을 사용하여 폴링합니다. netcat
명령은 grep
명령에 파이프 할 수있는 정보 스트림을 반환하여 CSV
파일에 필요한 특정 값을 가져옵니다. 그 반환 값을 grep
에서 bash
변수로 저장 한 다음 스크립트의 끝에 저장 한 모든 bash
변수를 CSV
파일에 씁니다. (충분히 간단합니다.)Bash, Netcat, Pipe, perl
변경하려는 내용은 저장하려는 각 정보에 대해 발행해야하는 netcat
명령의 양입니다. 각 발행 된 netcat
명령으로 모든 가능한 값이 리턴됩니다 (매번 동일한 데이터를 리턴하고 네트워크에서 부담이됩니다). 그래서 netcat
을 한 번만 사용하고 나중에 변수를 만들어야하는 반환 값을 구문 분석하여 나중에 만들 수있는 CSV
파일의 단일 레코드로 연결할 수 있습니다.
특정 질의 : >
은 (현재 grep
있어서 대) I는 아마도 \n
구분 한 줄 (각 항목과 파일을 얻을하여 파일로 netcat
명령의 출력을 전달하면bash
구문을 사용하여 EOL 레코드 분리 자로 - perl 정규식에서 쉽게). 그러나 의 출력을 bash
변수에 직접 저장하고 해당 변수를 반향 시키면 모든 데이터가 뒤죽박죽이어서 분석하기가 번거로 롭습니다.
두 가지 옵션으로 연주 해 보았습니다. 첫째, 펄 원더 라이너가 좋은 해결책이 될 수 있다고 생각합니다.하지만 최선의 실행 방법을 모르겠습니다. 가짜 코드는 netcat
출력을 bash 변수에 저장 한 다음 어떻게 든 perl로 구문 분석하는 방법을 파악하는 것일 수 있습니다 (직접적인 것은 아니지만).
두 번째 옵션은 bash
의 >
을 사용하고 netcat
의 출력을 파일로 보냅니다. 이것은 perl
과 Regex가 \n
EOL
으로 주어지기 때문에 쉽게 처리 할 수 있지만 외부 파일을 열고 처리하기 위해 perl
스크립트로 전달한 다음 반환 값을 bash
스크립트에 다시 입력하여 bash
변수로 입력해야합니다 파일 CSV
에
나는 여기서 간단한 것을 놓치고 있음을 알고 있습니다. 개행 입력을 변수에 netcat
에서 강제로 적용하고 그 변수에 대해 perl-one 라이너를 반복적으로 실행하여 필요한 CSV
변수를 모두 만드는 방법이 있습니까? 모두 동일한 bash
스크립트 내에 있습니까? 죄송합니다. 오랜 질문이었습니다.
너무 많은 단어, 충분하지 않은 코드 –
** 특정 질문 * ** ** ** 특정 질문 * - 한 문장 또는 두 문장을 쓸 수 있습니다. 또한 몇 가지 코드를 in과 output으로 표시하고 여러분의 접근 방식에 어떤 문제가 있는지 지적하십시오. – Rubens
너희들은 너무 많은 단어와 충분하지 않은 코드에 대해 불평하고있다. 게으르지 마라. secJ는 가능한 한 자신의 문제에 대해 상세하게하려고 노력했습니다. – Yokai