Как я могу использовать столбец для разграничивания на вкладках и не пробелах?

$> cat ./deploymLog.sh 
#!/bin/bash

name=$1
log_file="Logone.txt"

if [[ -n "$name" ]]; then
    echo "$1=$( date +%s )" >> ${log_file}
else
    echo "argument error"
fi

Первый аргумент от командной строки может быть найден с позиционным параметром $1. [[ -n "$name" ]] тесты, чтобы видеть, если $name не пусто. date +%s возвращает текущую метку времени во время Unix. >> оператор используется для записи в файл путем добавления к существующим данным в файле.

$> ./deploymLog.sh tt

$> cat Logone.txt 
tt=1329810941

$> ./deploymLog.sh rr

$> cat Logone.txt 
tt=1329810941
rr=1329810953

Для большей читаемой метки времени Вы могли играть с date аргументы.

62
26.08.2017, 04:17
4 ответа
column -t -s '\t'

разделил бы столбцы на \ и t персонажи.

column -s \t совпадает с column -s t, поскольку обратная косая черта интерпретируется как оператор заключения в кавычки оболочкой.

Здесь Вы хотите передать реальный Символ табуляции столбцу. С ksh93, zsh, ударом, mksh, busybox sh или FreeBSD sh:

column -ts $'\t'

Или введите реальный символ табуляции путем ввода Вкладки Ctrl-V при приглашении оболочки (в кавычках, или предшествовал обратной косой чертой, поскольку символ табуляции является маркерным разделителем в синтаксисе оболочки точно так же, как пространство), или использование "$(printf '\t')" (те двойные кавычки должны были отключить split+glob оператор, поскольку символ табуляции также, оказывается, находится в значении по умолчанию $IFS).

87
27.01.2020, 19:32
  • 1
    я должен был сделать column -t -s $'\t' поскольку удар, казалось, думал '\t' имейте в виду обоих \ и t, но $'\t' означает литеральную вкладку. Bash воняет –  ThorSummoner 22.06.2016, 01:11

-t для выбора числа столбцов, которые Вы хотите. Оставление этого незаполненного ничего не изменяет. Кроме того, Вы хотите пробел после -s поэтому испытайте это:

cat myfile | column -s \t

2
27.01.2020, 19:32
  • 1
    Спасибо. Это близко к тому, что я ищу. Однако теперь все строки объединяются на одну строку. Как я могу сохранить каждую строку на ее собственной строке? –  turtle 30.11.2012, 12:09
  • 2
    По умолчанию, column строки заливок перед столбцами. Можно интересоваться pr –  lurker 30.11.2012, 12:35

Я использовал следующее (работает только если ваш текст не содержит|):

cat myfile | tr '\t' '|' | column -t -s '|'

Это просто заменяет вкладки вертикальными чертами, а затем использует столбцы с вертикальными чертами в качестве разделителей.

(Я сделал это, потому что не увидел в ответе Стефана ничего, что могло бы сработать -или -коробку -в рыбьей оболочке. В противном случае ответ Стефана кажется хорошим.)

6
27.01.2020, 19:32

Для POSIX $'...', известный как экранирование ANSI -C, не определен.

Вместо этого вы можете использовать$(printf '\t'):

column -t -s "$(printf '\t')"

$(printf '\011')можно использовать, так как011(восьмеричное представление десятичного числа 9 )— код ANSI для символа горизонтальной табуляции:

column -t -s "$(printf '\011')"

Тем не менее, см. ниже комментарий Стефана Шазеласа о том, почему это может быть несовместимо между версиями оболочки.

8
27.01.2020, 19:32

Теги

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