입력 파일(.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
이는 파일을 한 줄씩 읽고 변수 ${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