awk: удалить несколько вкладок между каждым полем и вывести строку, где каждое поле отделено одной вкладкой - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть файл, чья 11-я строка теоретически должна содержать 1011 столбцов, но похоже, что между каждым из ее полей имеется более 1 вкладки. Более конкретно, если я использую

awk '{print NF}' file

, то я вижу, что 11-я строка имеет то же количество полей, что и все остальные (за исключением первых десяти строк, которые имеют другой формат. Это ожидается) , Но если я использую

awk 'BEGIN{FS="\t"} {print NF}' file

, я вижу, что в 11-й строке есть поля 2001 года. Исходя из этого, я подозреваю, что некоторые из его полей разделены более чем одним пробелом. Я бы хотел, чтобы каждое поле было разделено только одной вкладкой, поэтому я попытался

awk 'BEGIN{OFS="\t"} {print}' file > file.modified

Однако это не решает проблему, поскольку

awk 'BEGIN{FS="\t"} {print NF}' file.modified 

по-прежнему указывает на то, что 11-е Линия имеет 2001 полей. Кто-нибудь может указать способ достижения моей цели? Большое спасибо! Я поместил первые 100 строк моего файла в следующую ссылку на диске Google. https://drive.google.com/file/d/1qOjzjUnJKJpc4VpDxwKPBcqMS7MUuyKy/view?usp=sharing

Ответы [ 2 ]

4 голосов
/ 23 февраля 2020

Чтобы сжать несколько вкладок на одной вкладке, вы можете использовать tr:

tr -s '\t' <file >file.modified
1 голос
/ 23 февраля 2020

Это может помочь с GNU awk:

awk 'BEGIN{FS="\t+"; OFS="\t"} {$1=$1; print}' file

См .: 8 Мощные встроенные переменные Awk - FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...