탭으로 구분된 열을 인쇄하려고 합니다.
먼저 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
일치 패턴으로만 사용할 경우 오류 메시지가 없고 출력 파일이 생성되지 않습니다. 조용한 행동의 이유를 아는 사람이 있습니까?
감사해요.