루프를 사용하여 폴더의 여러 파일에 awk 스크립트를 적용하는 방법

루프를 사용하여 폴더의 여러 파일에 awk 스크립트를 적용하는 방법

폴더의 모든 파일에 awk 스크립트를 적용하려고 하는데 다음을 사용하고 있습니다.

for %%i in (*.txt) do (awk -f NormalizeFiles.awk "%%i" > new\"%%i")

그런데 다음과 같은 메시지를 받았습니다.

Syntactic error near the unexpected element '('

나는 무엇이 잘못되었는지 모른다.

답변1

awk를 통해 입력 파일을 실행하고 결과를 다른 파일 이름에 저장하려는 것 같습니다. 매우 구체적인 파일 이름 지정이 필요하지 않은 한 다음과 같이 작동합니다.

for i in *.txt; do
    awk -f NormalizeFiles.awk $i > $i.out
done

귀하의 질문에 bash 태그가 지정되어 있지만 누군가 지적했듯이 귀하의 구문은 괄호를 잘못 사용하는 등 bash가 아닙니다. %% 구문은 올바르게 사용되지 않으며 목표와 관련이 없는 것 같지만 확인해야 합니다.http://www.tldp.org/LDP/abs/abs-guide.pdf더 알고 싶다면.

답변2

awk다른 파일에 직접 쓸 수 있습니다.

예를 들어

awk '{print > "new/"FILENAME}' *.txt

스크립트에서 이와 같은 것을 사용할 수 있습니다 NormalizeFiles.awk .

모든 print 문에 대해 입력 하지 않으려면 > "new/"FILENAME다음을 수행할 수 있습니다.

awk 'FNR == 1 { out = "new/"FILENAME } ; { print > out }' *.txt

out스크립트는 FNR == 1새 파일의 첫 번째 줄( )을 볼 때마다 출력 파일(변수에서)을 변경합니다.

그런데 스크립트에 #!/usr/bin/awk -f첫 번째 줄이 있고 실행이 가능하다면 chmod실행 파일이나 다른 스크립트처럼 직접 실행할 수 있습니다 ./NormalizeFiles.awk.#!/bin/bash#!/usr/bin/perl

관련 정보