Как добавить индекс в существующий файл с разделителями табуляции с помощью команды linux? - PullRequest
0 голосов
/ 26 октября 2018

У меня есть файл ниже, и он разделен табуляцией.

TK              015_LIT NA      CAT     mask

Я хочу, чтобы он был продублирован, чтобы сделать его большим файлом, как показано ниже.

TK              015_LIT NA      CAT     mask1
TK              015_LIT NA      CAT     mask2
TK              015_LIT NA      CAT     mask3
TK              015_LIT NA      CAT     mask4
TK              015_LIT NA      CAT     mask5
TK              015_LIT NA      CAT     mask6

Тем не менее, я кодировал его, как показано ниже, но он не работал, потому что число рядом с mask всегда равно нулю, хотя я увеличивал его.Мой код показан ниже.

counter=0
for start in {1..5}
do
        awk '{printf("%s \t %s \t %s \t %s \t %s \t %d \n",$1,$2,$3,$4,$5,$counter)}' ./medium/cause1
        let counter=1+$counter
        echo $counter
done

В любом случае, как достичь моей цели?

Ответы [ 3 ]

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

Вы можете сделать это с помощью следующей однострочной строки awk:

 awk -v times=5 '{while(i<times) print $0(++i)}' file

Измените переменную times, чтобы получить различное количество строк.Вы также можете передать переменную оболочки в awk, например:

 awk -v times="$VarFromShell" '{.....
0 голосов
/ 26 октября 2018

Использование nl (man nl: nl - number lines of files) для добавления номера строки и rev для добавления его в конец (будет работать для 9 первых строк как есть:):

$ for i in {1..5}; do rev file ; done |       # 5 copies coming right up - reversed
  nl -w 1 -s "" |                             # add the line number
  rev                                         # re-reverse
TK              015_LIT NA      CAT     mask1
TK              015_LIT NA      CAT     mask2
TK              015_LIT NA      CAT     mask3
TK              015_LIT NA      CAT     mask4
TK              015_LIT NA      CAT     mask5
0 голосов
/ 26 октября 2018

Использование awk:

$ awk '{for (i=0;i<3;i++)print $0 i+1}' file
TK              015_LIT NA      CAT     mask1
TK              015_LIT NA      CAT     mask2
TK              015_LIT NA      CAT     mask3

Аналогичный, но другой результат с cat:

$ cat file file file file | cat -n
 1  TK              015_LIT NA      CAT     mask
 2  TK              015_LIT NA      CAT     mask
 3  TK              015_LIT NA      CAT     mask
 4  TK              015_LIT NA      CAT     mask

Вы можете передать переменные окружения в awk с аргументом -v.В вашем коде counter является только переменной awk и поэтому инициализируется 0 при каждом вызове.

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