Как распечатать файл с разделителями табуляции в терминале
Я экспортировал данные Excel в текстовый файл с разделителями табуляцией, но мне трудно распечатать его в терминале, вот файл:
heading1 heading2 heading3 heading4 heading5 heading6 heading7
col1row1 col2row1 col3row1 col4row1 col5row1 col6row1 col7row1
col1row2 col2row2 col3row2 col4row2 col5row2 col6row2 col7row2
col1row3 col2row3 col3row3 col4row3 col5row3 col6row3
col1row4 col2row4 col3row4 col4row4
Вы можете скачать текстовый файл здесь.
Я попробовал с помощью sed и awk.
update1: я на bsd (mac), cat file.txt печатает в ужасном формате, который не читается, у меня есть bash-скрипт, которому нужны входные теги, поэтому я просто сначала печатаю теги и выбираю правильные теги из напечатанного списка
1 ответ
Есть две проблемы с вашим файлом:
У этого есть старые окончания стиля Mac. Это приводит к тому, что вывод на терминал Unix будет перезаписан в замешательстве
В нем нет окончательного перевода строки.
Использование tr и echo
Один из способов исправить это:
$ tr '\r' '\n' <test_tab_delimited.txt ; echo ""
heading1 heading2 heading3 heading4 heading5 heading6 heading7
col1row1 col2row1 col3row1 col4row1 col5row1 col6row1 col7row1
col1row2 col2row2 col3row2 col4row2 col5row2 col6row2 col7row2
col1row3 col2row3 col3row3 col4row3 col5row3 col6row3
col1row4 col2row4 col3row4 col4row4
Вот, tr '\r' '\n'
заменяет все символы возврата каретки (окончания строки в стиле Mac) символами новой строки (окончания строк в стиле unix). echo ""
Заявление добавляет последний перевод строки.
Использование awk
$ awk 1 RS='\r' test_tab_delimited.txt
heading1 heading2 heading3 heading4 heading5 heading6 heading7
col1row1 col2row1 col3row1 col4row1 col5row1 col6row1 col7row1
col1row2 col2row2 col3row2 col4row2 col5row2 col6row2 col7row2
col1row3 col2row3 col3row3 col4row3 col5row3 col6row3
col1row4 col2row4 col3row4 col4row4
Программа awk здесь состоит из одного символа 1
, Это говорит awk распечатать каждую запись, которую он читает
Настройка параметров RS='\r'
говорит awk обработать возврат каретки, \r
, как разделитель записей на входе.
Используя sed
$ sed 's/\r/\n/g; s/$/\n/' test_tab_delimited.txt
heading1 heading2 heading3 heading4 heading5 heading6 heading7
col1row1 col2row1 col3row1 col4row1 col5row1 col6row1 col7row1
col1row2 col2row2 col3row2 col4row2 col5row2 col6row2 col7row2
col1row3 col2row3 col3row3 col4row3 col5row3 col6row3
col1row4 col2row4 col3row4 col4row4
Здесь мы используем две команды sed:
s/\r/\n/g
говорит sed заменять возврат каретки на новые строки везде, где он находит.s/$/\n/
говорит sed добавить заключительный символ новой строки в конце каждой строки. Это происходит только один раз, потому что при вводе файл не имеет символов новой строки и, следовательно, sed обрабатывает весь файл как одну строку.
[Это решение было протестировано на GNU (Linux) sed. Выполнение его под BSD (OSX) sed может потребовать некоторых незначительных изменений.]
Использование GNU grep
$ grep -oP '[^\r]*(?=\r|$)' test_tab_delimited.txt
heading1 heading2 heading3 heading4 heading5 heading6 heading7
col1row1 col2row1 col3row1 col4row1 col5row1 col6row1 col7row1
col1row2 col2row2 col3row2 col4row2 col5row2 col6row2 col7row2
col1row3 col2row3 col3row3 col4row3 col5row3 col6row3
col1row4 col2row4 col3row4 col4row4
Это решение требует GNU grep
, Не будет работать по умолчанию grep
установлен на Mac.
Использование mac2unix
В вашей системе также может быть установлена утилита, которая может иметь имя mac2unix
, что сделано, чтобы сделать это преобразование.