awk의 출력을 지정된 디렉토리의 여러 개별 파일로 보내는 방법

awk의 출력을 지정된 디렉토리의 여러 개별 파일로 보내는 방법

awk의 출력을 지정된 디렉토리의 개별 파일로 보낼 수 없습니다. 작업 디렉토리에서 이 작업을 성공적으로 수행하고 mv 명령을 끝까지 연결할 수 있지만 awk지정된 디렉토리에 파일을 저장하는 데만 사용되기를 원합니다.

참고로 다음은 messages.txt별도의 메시지 파일로 분할하려는 단순화된 것입니다.

messageHeader:
  mh_field1: mh_val1
  mh_field2: mh_val2
messageData:
  md_field1: md_val1
  md_field2: md_val2

messageHeader:
  mh_field1: mh_val1
  mh_field2: mh_val2
messageData:
  md_field1: md_val1
  md_field2: md_val2

messageHeader:
  mh_field1: mh_val1
  mh_field2: mh_val2
messageData:
  md_field1: md_val1
  md_field2: md_val2

다음을 사용하여 메시지 파일을 별도의 메시지로 성공적으로 분할하고 각 메시지를 작업 디렉터리의 별도 파일에 출력할 수 있었습니다.

awk -v RS= '{print > ("message" NR ".txt")}'

작업 디렉토리에 message1.txt, 및 를 생성합니다 message2.txt. message3.txt또한 mv다음과 같이 이 기본 명령의 끝에 명령을 연결하여 출력을 지정된 디렉터리로 이동할 수도 있습니다.

out = "$(pwd)/messages"
mkdir -p $out
awk -v RS= '{print > ("message" NR ".txt")}' && mv message*.txt $out

message1.txt, 및 을 message2.txt생성 합니다 . 그러나 just를 사용하는 방법을 알 수 없습니다 . message3.txt./messagesawk

예를 들어 다음과 같이 메시지 파일을 분할하고 개별 메시지를 지정된 출력 디렉터리에 출력해 보았습니다.

out="$(pwd)/messages"
mkdir -p $out
awk -v RS= '{print > ($out "message" NR ".txt")}' messages.txt

이로 인해 다음 오류가 발생합니다.

awk: cmd. line:1: (FILENAME=- FNR=1) fatal: can't redirect to 'messageHeader:
  mh_field1: mh_val1 
  mh_field2: mh_val2
messageData:
  md_field1: md_val1
  md_field2: md_val2message1.txt' (file name too long)

다음과 같은 관련 질문을 찾았습니다."awk를 사용하여 파일을 분할하고 다른 디렉터리에 결과를 생성합니다."하지만 여전히 올바른 구문을 얻을 수 없습니다.

out="$(pwd)/messages"
mkdir -p $out
awk -v RS= path=$out '{f=path "message" NR ".txt"; print > f}' messages.txt 

awk: fatal: cannot open file `{f=path "message" NR ".txt"; print > f}' for reading (No such file or directory)

답변1

@steeldriver의 의견에 따르면 누락되어 -v올바른 구문이 생성됩니다.

out="$(pwd)/messages"
mkdir -p $out
awk -v RS= -v path="$out" '{f=path "message" NR ".txt"; print > f}' messages.txt

관련 정보