awk는 find execdir을 사용하여 탭으로 구분된 열을 인쇄합니다.

awk는 find execdir을 사용하여 탭으로 구분된 열을 인쇄합니다.

탭으로 구분된 열을 인쇄하려고 합니다.

먼저 find명령을 사용하여 처리할 파일 목록을 식별합니다.

둘째, 파일 경로를 구문 분석하여 split.

셋째, 지정된 탭으로 구분된 형식을 사용하여 필요한 몇 개의 열(밑줄이 그어진 여러 열의 조합인 첫 번째 열 포함)을 인쇄합니다 -v OFS='\t'.

넷째, 출력 경로를 인쇄하고 _step3.

INPUT="/Users/dir/in"
OUTPUT="/Users/dir/out/"
find "$INPUT" -type f -iname "*.txt_cap.txt" -execdir awk -v OFS='\t' var="$OUTPUT" '{n = split(FILENAME,p,"/"); print ($1"_"$2"_"$4"_"$3, $2, $5, $6, $7) >> (var p[n] "_step3")}' {} +

다음과 같은 오류 메시지가 나타납니다. 무엇이 잘못되었나요?

awk: syntax error at source line 1
 context is
     >>>  <<< 
awk: bailing out at source line 1

업데이트 - 각 변수에 -v를 추가한 후 @glennjackman의 제안에 따라 다른 오류 메시지가 나타납니다.

INPUT="/Users/dir/in"
OUTPUT="/Users/dir/out/"
find "$INPUT" -type f -iname "*.txt_cap.txt" -execdir awk -v OFS='\t' -v var="$OUTPUT" '{n = split(FILENAME,p,"/"); print ($1"_"$2"_"$4"_"$3, $2, $5, $6, $7) >> (var p[n] "_step3")}' {} +

다음과 같은 오류 메시지가 나타납니다.

awk: can't open file MAP_pv1.txt_cap.txt
 source line number 1

부가적인 질문으로 를 사용하면 find "$INPUT" -type f -iname "*.txt_cap.txt"터미널에 표시된 파일 목록을 볼 수 있습니다. 를 사용할 때 표시되는 파일도 볼 수 있습니다 "$INPUT" -type f -iname "*.txt_cap.txt". 그러나 파일 일치 패턴이 더 긴 첫 번째 awk와 함께 사용하면 명령에 대한 오류 메시지를 얻을 수 있지만 .txt일치 패턴으로만 사용할 경우 오류 메시지가 없고 출력 파일이 생성되지 않습니다. 조용한 행동의 이유를 아는 사람이 있습니까?

감사해요.

관련 정보