1650のサイトの場所のリストを含むテキストファイルを開くスクリプトがあります。私はこのリストを繰り返しながら、2つの別々のファイルのリスト、つまり1)見つかったファイルのリストと2)欠落しているファイルのリストを印刷しようとしています。サイトの場所のリストは1列です。私が経験している問題は、スクリプトが入力ファイルを読み取らずに繰り返さないということです。スクリプトは、「ファイル内の各行を読み取って繰り返すのではなく」単一のファイルを探します。
#!/bin/bash
file=Sites-1.txt
do
if "$file" ;
then
echo "$file found" >> found.tmp
else
echo "$file has not been found" >> missing.tmp
fi
done
ファイルを見つけるための Sites-1.txt の入力例
01-033-0043-SO2-2014.dat.out
01-033-0044-SO2-2014.dat.out
01-033-1002-SO2-2014.dat.out
01-071-0020-SO2-2014.dat.out
01-071-0026-SO2-2014.dat.out
予想される出力ファイルの構成
found.tmp
01-033-0043-SO2-2014.dat.out found
01-033-0044-SO2-2014.dat.out found
01-071-0026-SO2-2014.dat.out found
missing.tmp
01-033-1002-SO2-2014.dat.out has not been found
01-071-0020-SO2-2014.dat.out has not been found
ベストアンサー1
Sites-1.txt
各行にファイル名が含まれていて、現在のディレクトリのファイル名に改行文字が含まれていない場合は、次のことができます。
comm -23 <(sort -u Sites-1.txt) <(ls -A)
報告された出力にu
特殊行の有無。Sites-1.txt
ls -A
または以下を使用してzsh
:
expected=( ${(f)"$(<Sites-1.txt)"} )
actual=( *(ND) )
missing=( ${expected:|actual} )
print -rC1 -- $missing