변수를 다른 변수에 저장

변수를 다른 변수에 저장

for 루프의 한 변수 내용을 다른 변수에 저장하려고 하는데 다음과 같은 결과가 나타납니다.

0403-006 Execute permission denied

돕다.

while IFS='|' read -r col1 col2 col3 col4 col5 col6 col7
do 
for f in directory/*
    do
        files=$($f | awk -F "_" '{print $3}')
        echo $files
    done
done <test.txt

나는 이 프로그램을 실행할 수 있는 전체 권한을 가지고 있으며 echo $files를 입력하면 오류가 발생합니다.

답변1

스크립트가 수행하는 작업이 매우 불분명하고 완전히 잘못된 것처럼 보입니다. 정확히 무엇이 잘못되고 있고 무엇을 달성하고 싶은지 알아보려면 더 많은 세부 정보를 제공해야 합니다. 내 생각에는 오류가 다음 줄에서 발생하는 것 같습니다.

files=$($f | awk -F "_" '{print $3}')

특히 여기서 무슨 일이 일어나고 있는지 이해해야 합니다.

$f | awk -F "_" '{print $3}'

실행 중입니다 $f. 이것은 파일 중 하나입니다 directory/*. 그 중 하나는 0403-006실행할 수 없다는 것입니다.

변수 등 col1은 어떻습니까 col2? 읽은 데이터는 test.txt전혀 사용되지 않습니다.

내 추측이 맞더라도 스크립트가 정상적으로 보이지 않기 때문에 입력 데이터와 예상 출력이 포함된 최소한의 완전한 예제를 제공하십시오.

답변2

보고 있다당신만의 대답, 실제로 하고 싶은 것이 무엇인지 더 명확해집니다.

내 의견은 다음과 같습니다.

#!/bin/sh

dupsfile='/archival/test/sppark/dataindex/staging/duplicates.txt'

indir='/archival/test/sppark/datapdf/staging/renamedTriage'
baddir='/archival/test/sppark/datapdf/staging/badFiles'

dups=$( mktemp )
cut -d '|' -f 4 <"$dupsfile" >"$dups"

for pathname in "$indir"/*; do
    [ ! -f "$pathname" ] && continue

    string=$( printf '%s\n' "${pathname##*/}" | cut -d '_' -f 4 )

    if grep -qxF "$string" "$dups" then
        echo mv "$pathname" "$baddir"
    fi
done

rm "$dups"

자신의 답변과 이것의 차이점은 파일 목록이 데이터 파일의 각 줄에 대해 한 번이 아니라 한 번만 생성된다는 것입니다.

데이터 파일은 |네 번째로 구분된 열을 추출하고 임시 파일에 저장하여 구문 분석됩니다. 조사 중인 디렉터리의 각 파일에 대해 .이 사용됩니다 grep. 파일 이름의 네 번째 _구분 비트가 해당 임시 파일에 있으면 파일이 이동됩니다. echo실제로 파일을 이동하려면 삭제하세요 .

답변3

내가 원하는 것을 정확하게 수행하도록 스크립트를 수정했습니다.

while IFS='|' read -r col1 col2 col3 col4 col5 col6 col7
do 
    for f in /archival/test/sppark/datapdf/staging/renamedTriage/*
    do
        files=$(echo "$f" | awk -F "_" '{print $4}')
        if [[ $col4 == $files ]]; then
            mv $f /archival/test/sppark/datapdf/staging/badFiles/
        fi
    done
done </archival/test/sppark/dataindex/staging/duplicates.txt

내 while 루프는 내 txt 파일을 읽고 |로 구분된 각 열을 읽습니다. 내 디렉토리의 각 파일을 반복하는 for 루프가 있고 내 $col4값이 동일 $files하면 파일을 내가 지정한 디렉토리로 이동합니다.

관련 정보