Mac 터미널의 파일 세트에서 코드 실행

Mac 터미널의 파일 세트에서 코드 실행

.txt 파일을 수정하는 스크립트가 있습니다.

이건 내 스크립트야

awk 'BEGIN{FS=OFS="\t"}{split($1,a,"_"); split(a[3],b,"/"); print a[1],a[2],b[1],b[2],$0}' file.txt | awk 'BEGIN{FS=OFS="\t"}{split($18,a,";"); split(a[2],b,"="); print b[2],$0}' > out_file.txt 

내 폴더에 파일이 잔뜩 있어요

내 파일에서 이 스크립트를 실행하고 원본 파일 이름으로 각 출력을 반환하고 싶습니다.

나는 이것을 시도했다

 > for  i in `find . -maxdepth 1 -type f -iname "*.txt" awk 'BEGIN{FS=OFS="\t"}{split($1,a,"_"); split(a[3],b,"/"); print a[1],a[2],b[1],b[2],$0}'| awk 'BEGIN{FS=OFS="\t"}{split($18,a,";"); split(a[2],b,"="); print b[2],$0}'print > out}' *.txt
-bash: syntax error near unexpected token `|'
(base) user112$

하지만 아무 일도 일어나지 않았어

답변1

for i in *.txt; do
    
    awk 'BEGIN{FS=OFS="\t"}{split($1,a,"_"); split(a[3],b,"/"); print a[1],a[2],b[1],b[2],$0}' $i | awk 'BEGIN{FS=OFS="\t"}{split($18,a,";"); split(a[2],b,"="); print b[2],$0}' > $i'_1'.txt
done

답변2

이게 당신이 하고 싶은 일인가요?

awk '
    BEGIN { FS=OFS="\t" }
    FNR == 1 {
        close(out)
        out = FILENAME "_1.txt"
    }
    {
        split($1,a,/_/)
        split(a[3],b,"/")
        $0 = a[1] OFS a[2] OFS b[1] OFS b[2] OFS $0
        split($18,a,/;/)
        split(a[2],b,/=/)
        print b[2], $0 > out
   }
' *.txt

다른 이름으로 게시된 이전 질문에서 보여드린 것처럼 쉘 루핑이나 여러 명령에 대한 파이핑이 필요하지 않습니다.https://unix.stackexchange.com/a/605896/133219. 다시 말하지만, 수행하려는 작업을 수행하는 더 좋은 방법이 있을 수 있지만 샘플 입력/출력이 없으면 스크립트를 복사하는 것뿐입니다.

관련 정보