将变量存储在另一个变量中

将变量存储在另一个变量中

我试图将 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,你无法执行它。

变量col1col2等呢?读取的数据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 循环来循环遍历我的目录中的每个文件,如果 my$col4与 相同$files,那么它会将文件移动到我指定的目录

相关内容