2014-12-09 16 views
1

У меня очень большой файл, который имеет столбцы, разделенные специальными символами |^.Количество числовых символов разделительных символов

Одна важная вещь, следует отметить, что я нахожусь на сервере AIX

Примером данных будет:

name|^surname|^age|^city|^country 
john|^doe|^15|^chicago|^usa 
george|^reese|^14|^london|^england 

После поиска в Интернете самое лучшее, что я нашел следующие

cat TEST_FILE.DAT | awk -F"\|\^" '{ print NF }' 

Однако это всегда возвращает 1, поскольку он не признает 2 символы как 1 строки

Следующая команда возвращает правильное число разделителей, но я хочу сделать это с помощью комбинации |^ в качестве разделителя

cat TEST_FILE.DAT | awk -F"|" '{ print NF }' 

ответ

0

Использование \\ вместо \ работает для меня. Не знаю, почему именно. Вероятно, это связано с тем, как символы escape интерпретируются в драйвах bash, awk и awk, но я не могу дать хорошее объяснение.

$ cat test 
name | ^surname| ^age | ^city | ^country 
john | ^doe | ^15 | ^chicago | ^usa 
george | ^reese | ^14 | ^london | ^england 

$ cat test |awk -F'\\| \\^' '{for(i=1;i<=NF;i++){if($i)print $i}}' 
name 
surname 
age 
city  
country 
john 
doe  
15 
chicago 
usa 
george 
reese 
14 
london 
england 

Кстати, очень важно использовать одинарные кавычки для -F. Эта линия также работает, но это некрасиво:

cat test |awk -F"\\\\| \\\\^" '{for(i=1;i<=NF;i++){if($i)print $i}}' 
+0

я подтверждаю, что это работает для меня следующим образом 'кошка TEST_FILE.DAT | awk -F '\\ | \\ ^' '{print NF}' 'большое спасибо! – yian

0

попробовать это:

awk -F'[|]\\^' '{print NF}' file 

или

awk -F'[|][\\^]' '{print NF}' file 
Смежные вопросы