入力ファイル(.txtまたは.csv)があり、このファイルには異なる値があります(時々値はありません -> "")。これらの値のいずれかが0.001より小さい場合(または空 -> "")、出力は "UNCONFIRMED"でなければなりません。入力ファイルの各行に0.001より大きい(または等しいかどうかは重要ではありません)値が含まれている場合、出力は「確認済み」でなければなりません。
1.csvと入力してください。
"1.23"
"0.01"
2.csvと入力してください。
"1.23"
"0.01"
"0.00001"
""
""
"0.75"
出力-1.csv
"CONFIRMED"
出力2.csv
"UNCONFIRMED"
答え1
GNUの使用awk
:
gawk -F '"' '
BEGINFILE {found = 0}
$2 < 0.001 {found = 1; nextfile}
ENDFILE {
output_file = FILENAME
sub("input", "output", output_file)
print FS (found ? "UN" : "") "CONFIRMED" FS > output_file
}' ./input*.csv
答え2
シンプルで読みやすいフォーマット
file=input-1.csv
status="CONFIRMED"
minvalue=0.001
for i in $(cat $file)
do
if [ $(echo "${i//\"/} < $minvalue" | bc) -eq 1 ]
then
status="UNCONFIRMED"
break
fi
done
echo $status
これは、ファイルを1行ずつ読み込み、変数${i//\"/}
(存在する場合)から削除し、次にパイプします。"
echo number < minvalue
紀元前、true、またはfalseを返します。結果が true の場合、ループは中断され、状態変数は CONFIRMED から UNCONFIRMED に変更されます。
あなたはする必要があります紀元前このために。
答え3
csvsql
Pythonベースの使用csvkit
$ csvsql --no-header-row --snifflimit 0 --query '
SELECT CASE (SELECT COUNT(*) FROM "STDIN" WHERE a < 0.001)
WHEN 0 THEN "CONFIRMED" ELSE "UNCONFIRMED"
END AS "Status"
' < input-1.csv
Status
CONFIRMED
$ csvsql --no-header-row --snifflimit 0 --query '
SELECT CASE (SELECT COUNT(*) FROM "STDIN" WHERE a < 0.001)
WHEN 0 THEN "CONFIRMED" ELSE "UNCONFIRMED"
END AS "Status"
' < input-2.csv
Status
UNCONFIRMED
出力を引用符付き文字列にするには、結果をパイプします。csvformat -U1