2016-12-16 2 views
0

Я новичок в использовании терминала Mac. Мне нужно добавить столбец с разделителями табуляции в текстовый файл с тремя существующими столбцами. Колонки выглядят довольно много, как это:Создать окончательный столбец, содержащий номера строк в текстовом файле

org1  1-20  1-40 
org2  3-35  6-68 
org3  16-38 40-16 

и т.д.

мне они нужны, чтобы выглядеть следующим образом:

org1  1-20  1-40  1 
org2  3-35  6-68  2 
org3  16-38 40-16  3 

т.д.

Мои извинения, если этот вопрос был покрыт , Ответы на подобные вопросы иногда чрезвычайно эзотеричны и нелегко переводимы в эту конкретную ситуацию.

+0

Вы хотите поместить номера строк в последний столбец или что-то еще? –

+0

В последней колонке да. :) – AKGreene

ответ

4

В awk. print записи и требуемая вкладка и количество строк после него:

$ awk '{print $0 "\t" NR }' foo 
org1  1-20  1-40 1 
org2  3-35  6-68 2 
org3  16-38 40-16 3 
+0

Большое спасибо! Для дальнейшего использования, знаете ли вы способ распечатать слово перед каждым номером? например «line_1, line_2, line_3 и т. д.»? – AKGreene

+0

Просто замените '' \ t "' на '' \ t line_ "' (untested). –

0

Вы можете paste файл рядом с тем же файлом с номерами строк предварённого (nl), а все остальные столбцы удалены (cut -f 1):

$ paste infile <(nl infile | cut -f 1) 
org1  1-20  1-40  1 
org2  3-35  6-68  2 
org3  16-38 40-16  3 

Конструкция <(...) называется process substitution и в основном позволяет обрабатывать вывод команды как файла.

1

Если вы хотите добавить номера строк в последней колонке:

perl -i -npe 's/$/"\t$."/e' file 

где

  • -i заменяет файл-темпе (удалить, если вы хотите, чтобы распечатать результат в стандартный вывод);
  • -n заставляет Perl применять подстановку к каждой строке из файла, точно так же как sed;
  • -p печатает результат выражения;
  • -e принимает выражение Perl;
  • s/.../.../e заменяет первую часть на вторую (с разделителем на косую черту), а флаг e заставляет Perl оценивать замену как выражение Perl;
  • $ - конец якоря;
  • $. переменная хранит номер текущей строки

Другими словами, команда заменяет конец строки ($) с язычком, за которым следует номер строки $..