Скрипт для поиска действительных и недействительных записей файла CSV - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь разделить действительные и недействительные записи в файле CSV на основе количества столбцов.Я прошел ниже вопрос SO и, кажется, делает то же самое.

Удалить строку, которая содержит более X столбцов в CSV

Однако для моего случая разделительПодходит ^ H, поэтому опробовано ниже.

awk -v FS="\b" 'NF==3' sample.csv >> output.csv
awk -v FS="\\^H" 'NF==3' sample.csv >> output.csv
awk -v FS="\\cH" 'NF==3' sample.csv >> output.csv
awk -v FS="^H" 'NF==3' sample.csv >> output.csv

Однако для разделителя ^ H ничего не работает.

Более того, в предыдущем вопросе SO они собирали действительные записи (для вывода)Я хочу захватить и недействительные записи в двух разных файлах.

Sample.csv

timestamp,header2,header3
1^H1val2^H1val3
2^H2val2^H2val3
3^H4^H4val2^H4val3
5^H5val2^H5val3
6^H6val2^H6val3


Valid.csv

timestamp,header2,header3
1^H1val2^H1val3
2^H2val2^H2val3
5^H5val2^H5val3
6^H6val2^H6val3


Invalid.csv

timestamp,header2,header3
3^H4^H4val2^H4val3

Любые предложения, пожалуйста.

1 Ответ

0 голосов
/ 11 октября 2018

Не могли бы вы попробовать следующее.В основном он ищет 2 условия: 1-я проверка - если количество полей равно 3, затем поместить вывод в Valid.csv, если количество полей больше 3, затем поместить вывод в Invalid.csv выходной файл.

awk -F'\\^H' 'NF==3 && FNR>1{print > "Valid.csv"} NF>3 && FNR>1{print > "Invalid.csv"} FNR==1{print $0 > "Valid.csv";print $0 > "Invalid.csv"}' sample.csv

Теперь добавляем не одну линейную форму решения.

awk -F'\\^H' '
NF==3 && FNR>1{
  print > "Valid.csv"
}
NF>3 && FNR>1{
  print > "Invalid.csv"
}
FNR==1{
  print $0 > "Valid.csv"
  print $0 > "Invalid.csv"
}' sample.csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...