find로 찾은 각 파일에 대해 awk를 실행하고 결과를 새 파일 이름으로 리디렉션합니다.

find로 찾은 각 파일에 대해 awk를 실행하고 결과를 새 파일 이름으로 리디렉션합니다.

find에서 결과를 얻은 다음 awk를 실행하여 처음 두 열을 인쇄하려고 합니다. 그런 다음 기존 파일 이름을 사용하고 이름에 추가 접미사를 추가하여 이러한 결과를 각 파일의 새 파일 이름으로 리디렉션하려고 합니다. 디렉터리의 파일, 원본 소스는 file.txt로 유지되고 새 파일의 이름은 file-new.txt입니다.

예를 들어:

find -type f -iname "*.txt" -exec awk '{print $1, $2}' {} \;

이렇게 하려면 무엇을 추가해야 합니까? sed를 사용하는 것이 더 나은 선택일까요?

답변1

가장 간단한 방법은 awk의 출력 리디렉션을 사용하는 것입니다. awk 출력 리디렉션은 간단한 경우에 사용하기가 매우 쉽습니다. 리디렉션이 처음 사용될 때 파일을 열고 이후에 기존 파일 설명자를 사용하여 동일한 파일 이름으로 리디렉션합니다.

파일 이름에 접미사를 추가하려면 쉽습니다.

find -type f -iname "*.txt" -exec awk '{print $1, $2 >(FILENAME "-new")}' {} +

그러나 파일 이름에 대해 더 복잡한 변환을 수행할 수 있습니다(여기에서는 각 입력 파일의 첫 번째 줄에서만 다시 계산됩니다).

find -type f -iname "*.txt" -exec awk '
    FNR==1 {out=FILENAME; sub(/\.[^.]*$/, "-new&", out) || out = out "-new"}
    {print $1, $2 >out}
' {} +

관련 정보