Bash заменяет символы в выводе

Утилита join объединяет строки двух файлов на основе общего столбца. Это требует, чтобы файлы были отсортированы по этому столбцу.

join -t $'\t' -1 10 -2 1 -o 2.1,2.2,1.7 <(sort -t $'\t' -k10 file1) <(sort -t $'\t' file2)
  • $ '\ t' - это символ табуляции, -t $ '\ t' говорит использовать его в качестве разделителя полей.
  • join -1 10 -2 1 означает объединение строк, когда поле 10 первого файла совпадает с полем 1 второго файла.
  • -o… перечисляет поля для вывода.
  • использует вывод команды sort как один из входов join .

$ '…' и требуют ksh или bash, они не работают в обычном sh.

Если file2 уже отсортирован, вы можете использовать это, которое работает в обычном sh:

sort -t $'\t' -k10 file1 |
join -t "$(printf \\t)" -1 10 -2 1 -o 2.1,2.2,1.7 - file2

Если вы хотите сохранить порядок одного из файлов, вы все равно можете использовать join , но сначала добавьте номера строк, а в конце отсортируйте по исходным номерам строк. Например, чтобы сохранить порядок файл2 :

join -t $'\t' -1 10 -2 1 -o 2.1,2.2,2.3,1.7 \
     <(sort -t $'\t' -k10 file1) \
     <(

3
02.05.2016, 15:02
3 ответа

Возможно, что-то вроде этого решит проблему:

#!/bin/bash                                                                                                                                                                    

function printThing(){

    local timeVar=$(date +"%T")
    local lines="\                                                                                                                                                             
XX----------------------------------------------------------XX                                                                                                                 
|XXX                                                        |XXX                                                                                                               
|  XX                                                       |   XXX                                                                                                            
|   XX------------------------------------------------------+-----XXX                                                                                                          
|    |                                                              +                                                                                                          
|    |     +----------------------------------------------------+   |                                                                                                          
|    |     |                                                    |   |                                                                                                          
|    |     |                                                    |   |                                                                                                          
|    |     |                                                    |   |                                                                                                          
|    |     |                                                    |   |                                                                                                          
|    |     |                                                    |   |                                                                                                          
|    |     |                       $timeVar                     |   |                                                                                                          
|    |     |                                                    |   |                                                                                                          
|    |     |                                                    |   |                                                                                                          
|    |     |                                                    |   |                                                                                                          
|    |     |                                                    |   |                                                                                                          
|    |     |                                                    |   |                                                                                                          
+XX--+     |                                                    |   |                                                                                                          
  XX |     +----------------------------------------------------+   |                                                                                                          
   XXX                                                              |                                                                                                          
     +--------------------------------------------------------------+"

    for i in "${lines[@]}"
    do
        echo "$i"
    done
}

printf "\033c"

while :
do
    timeVar=$(date +"%T")
    printThing
    sleep 1
    printf "\033c"
done
1
27.01.2020, 21:12

Если у вас установлен ncurses , вы можете использовать команду tput , чтобы переместить курсор в какое-либо место на терминал, где вы можете использовать любую команду печати.

Пример:

clear
for i in $(seq 1 40)
do
    echo '##                                                                    ##'
done
for i in $(seq 1 100)
do
    tput cup 20 5
    date
    sleep 1
done

Однако перед выходом из функции вы можете переместить курсор в безопасное место. Например, используя

tput cup $(tput lines) 0

, который переместит его в последнюю строку терминала.

3
27.01.2020, 21:12

Для терминалов, которые его поддерживают, можно использовать escape-последовательности курсора сохранения и курсора восстановления :

#! /bin/sh -
save_cursor=$(tput sc) restore_cursor=$(tput rc)
text="\
XX----------------------------------------------------------XX
|XXX                                                        |XXX
|  XX                                                       |   XXX
|   XX------------------------------------------------------+-----XXX
|    |                                                              +
|    |     +----------------------------------------------------+   |
|    |     |                                                    |   |
|    |     |                                                    |   |
|    |     |                                                    |   |
|    |     |                                                    |   |
|    |     |                                                    |   |
|    |     |            $save_cursor$(date +%T)  <------+  Characters to replace!  |
|    |     |                                                    |   |
|    |     |     <--------------------------+                   |   |
|    |     |                                                    |   |
|    |     |                                                    |   |
|    |     |                                                    |   |
+XX--+     |                                                    |   |
  XX |     +----------------------------------------------------+   |
   XXX                                                              |
     +--------------------------------------------------------------+"

printf '%s\n' "$text"

while sleep 1; do
  printf %s "$restore_cursor$(date +%T)"
done
3
27.01.2020, 21:12

Теги

Похожие вопросы