Как считать файлы тире

Если все, что Вы хотите сделать, извлечь столбец данных, можно просто использовать cut. Например, если файл example.dat содержит

a b c d e
1 2 3 4 5

затем cut -d ' ' -f 3 example.dat дает

c
3

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

Править: Этот сценарий удара называет awk для создания эквивалентного вывода:

#!/bin/bash
var1=$1

awk '{print $colvar}' colvar=$1 example.dat

15
11.03.2015, 00:39
3 ответа

Для команд, которые вводятся из stdin, вы можете использовать перенаправление:

cat <-file_name
11
27.01.2020, 19:49

Используйте двойной -- для пометки конца опций:

cat -- -<FILENAME>

Другие программы, такие как touch, rm или git checkout, также следуют этой конвенции:

$ touch -- -file
$ ll
total 0
-rw-r--r-- 1 ja ja 0 Mar 10 13:13 -file
$ echo hi! >> -file
$ cat -- -file
hi!
$ rm -- -file
$ echo $?
0

WARNING: В соответствии с требованиями добросовестной практики всегда использовать -- после rm в скриптах. Атакующий может поместить --rf файл в каталог и rm * примет его за параметры выполнения. Смотрите:

$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch -- -rf
$ rm *
$ ll
total 0
-rw-r--r-- 1 ja ja 0 Mar 10 13:21 -rf

Ой, это не то, что мы имели в виду, мы не хотели удалять каталоги. Мы должны были использовать --:

$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch -- -rf
$ rm -- *
rm: cannot remove `dir': Is a directory
$ ll
total 4.0K
drwxr-xr-x 2 ja ja 4.0K Mar 10 13:22 dir
22
27.01.2020, 19:49

Альтернативы становятся странными:

dd if=-x 2>/dev/null
2
27.01.2020, 19:49

Теги

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