В CSV-файле каждое поле отделяется запятой. Проблема в том, что само поле может иметь запятую:
Name,Phone
"Woo, John",425-555-1212
Вам действительно нужен библиотечный пакет, который предлагает надежную поддержку CSV вместо того, чтобы полагаться на использование запятой в качестве разделителя полей. Я знаю, что языки сценариев, такие как Python, имеют такую поддержку. Тем не менее, я чувствую себя комфортно с языком сценариев Tcl, так что это то, что я использую. Вот простой Tcl-скрипт, который делает то, что вы просите:
#!/usr/bin/env tclsh
package require csv
package require Tclx
# Parse the command line parameters
lassign $argv fileName columnNumber expectedValue
# Subtract 1 from columnNumber because Tcl's list index starts with a
# zero instead of a one
incr columnNumber -1
for_file line $fileName {
set columns [csv::split $line]
set columnValue [lindex $columns $columnNumber]
if {$columnValue == $expectedValue} {
puts $line
}
}
Сохраните этот скрипт в файл с именем csv.tcl и вызовите его как:
$ tclsh csv.tcl filename indexNumber expectedValue
Объяснение
Скрипт построчно читает файл CSV и сохраняет строку в переменной $ line, затем разбивает каждую строку на список столбцов (переменная $ columns). Затем он выбирает указанный столбец и присваивает его переменной $ columnValue. Если есть совпадение, распечатайте оригинальную строку.