以降の質問で昨日受け取った質問:
Linuxでスクリプトを実行するDatastage ETLツールで、次のコマンドを実行しています。
私は以下を実行しました:
for file in /Path/filename_*; do [[ $(wc -l "$file" | cut -d' ' -f1) -eq 1 ]] && rm $file ; done
Reply=0
この場合、私のフォルダに空のファイルがあります。
for file in /Path/filename_*; do [[ $(wc -l "$file" | cut -d' ' -f1) -eq 1 ]] && rm $file ; done
Reply=1
私のフォルダに空のファイルがありません。
どちらも同じコマンドですが、応答が異なります。応答コード 1 を受信すると、操作は失敗します。
ベストアンサー1
ゼロ以外の状態を維持するには、演算子の代わりにステートメントを[[
使用できます。if
&&
if [[ $(wc -l <"$file") -eq 1 ]]; then
echo rm -- "$file"
fi
すべての行を計算するのではなく、2番目の行だけを読む必要があります。
for file in /Path/filename_*; do
[ -f "$file" ] || continue
{
read _
read _ || echo rm -- "$file"
} <"$file"
done
2行目がread
失敗した場合は、POSIXによると2行目はありません。