Проверьте, установлен лиSUNWgtar
. Это версия GNU tar
и предоставляет /usr/sfw/bin/gtar
, что позволяет использовать опции GNU для tar.
Предполагается, что CSV правильно отформатирован:
Date,User,Email,Comment
11/22/16,aaaa,xxxxx@xxxxx.com,"too much, later"
Это работает, используя csvkit
:
$ csvgrep -c Comment -m 'too much, later' data.csv
Date,User,Email,Comment
11/22/16,aaaa,xxxxx@xxxxx.com,"too much, later"
$ csvgrep -c 4 -m 'too much, later' data.csv
Date,User,Email,Comment
11/22/16,aaaa,xxxxx@xxxxx.com,"too much, later"
В качестве альтернативы, используя sed
(поскольку мы знаем, что он находится в последнем столбце):
$ sed -n -e '1p' -e '/too much, later"$/p' data.csv
Date,User,Email,Comment
11/22/16,aaaa,xxxxx@xxxxx.com,"too much, later"
С данными, как показано в вопросе:
$ sed -n -e '1p' -e '/too much,later$/p' data.csv
Date,User,Email,Comment
11/22/16,aaaa,xxxxx@xxxxx.com,too much,later
awk -F"," 'NF>4 {
b=$0; $1=$2=$3=""
if (match($0,/too much, ?later/))
print b
}' OFS="," input.csv > input1.csv
Я вижу простую проблему: строка слишком много, позже
содержит ,
(запятая) и ваш разделитель полей также ,
, поэтому параметр $4 будет слишком много
и $5 будет позже
.
Вы можете изменить свой код следующим образом:
awk -F , '$4 == "too much" && $5 == "later " { print }' input.csv > input1.csv
Обратите внимание, что это решение будет работать, только если последнее поле будет точно слишком много, позже
(обратите внимание на завершающий пробел в строке).
Решение на основе regex является более надежным:
awk -F , '/,\s*too\s+much,\s*later\s*/{ print }' input.csv > input1.csv
В этом решении вы можете иметь любое количество символов пробела в строке.