У меня есть большой (2 ГБ) текстовый файл с разделителями-запятыми, содержащий некоторые данные от датчиков. Иногда датчики выключены и данных нет. Я хочу удалить строки, если в каждой строке больше заданного числа No Data
или Off
или any non-numeric
значений; исключая заголовок. Меня интересует только подсчет с третьей колонки. Например: мои данные выглядят как:Удалите строку, если она содержит более определенного числа числовых значений
Tag, Description,2015/01/01,2015/01/01 00:01:00,2015/01/01 00:02:00, 2015/01/01 00:02:00
1827XYZR/KB.SAT,Data from Process Value,2.1,Off,2.7
1871XYZR/KB.RAT,Data from process value,Off,No Data, No Data
1962XYMK/KB.GAT,Data from Process Value,No Data,5,3
1867XYST/KB.FAT,Data from process value,1.05,5.87,7.80
1871XKZR/KB.VAT,Data from process value,No Data,Off,2
Здесь первая строка - это заголовок, и я хочу сохранить его как есть. Но я хочу удалить те строки, которые имеют 2 или более 2 No Data
или Off
или любые поля non numeric
в любых столбцах/полях из третьего столбца и далее. Другими словами, строки из 4 или текстовых полей из пяти. В примере выше 3-я и 6-я строки содержат 2 или более 2 No Data
или Off
полей, и я хочу их удалить. Поэтому, мой любимый результат будет
Tag, Description,2015/01/01,2015/01/01 00:01:00,2015/01/01 00:02:00, 2015/01/01 00:02:00
1827XYZR/KB.SAT,Data from Process Value,2.1,Off,2.7
1962XYMK/KB.GAT,Data from Process Value,No Data,5,3
1867XYST/KB.FAT,Data from process value,1.05,5.87,7.80
я могу сделать это для конкретного случая с петлей, как:
awk -F, '{ non_numeric=0;
for(i=1;i<=NF;i++){
if($i ~ //) non_numeric++
}
if(non_numeric<2) print $0
}' testfile.txt
Здесь я рассматриваю только No Data
и Off
. Как я могу подсчитать все нечисловые строки. Если я изменил оператор if на
if($i ~ /[^0-9]/) non_numeric++
он не работает и не дает выхода. Кроме того, поскольку я использую цикл, я считаю, что он будет медленным. Мы можем как-то ускорить это. Любое решение командной строки - это хорошо.
Используйте цикл 'for()' для подсчета числа числовых полей. Когда цикл будет завершен, распечатайте линию, если она не менее 4. – Barmar
В основном, я только что повторил ваши требования. Это должно быть просто, чтобы превратить его в код 'awk'. Пожалуйста, покажите, что вы попробовали, чтобы мы могли помочь вам исправить это. Мы не собираемся делать вашу работу за вас. – Barmar
Третья строка в данных примера содержит следующее: 'Нет данных. Нет данных'. Это опечатка? был '.', который должен быть', '? – redneb