Большинство команд могут работать с вводом, который является либо файлом, который им требуется открыть для ввода, либо потоком данных, который передается команде через STDIN.
Когда содержимое cat file.txt
передается другой команде через канал ( |
), выходные данные через STDOUT, которые передаются в канал на левой стороне, настраиваются и подаются в команду, которая находится на правой стороне STDIN трубопровода.
Если содержимое не передается через STDOUT - > STDIN через канал, команды могут получать данные, открывая файлы, передаваемые по имени через аргументы командной строки.
Отправка выходных данных в STDOUT.
$ cat file
1
2
3
4
5
Выход из файла cat
передается через STDOUT в STDIN grep
через канал.
$ cat file | grep 5
5
Обработка файла в качестве аргумента командной строки.
$ grep 5 file
5
Обработка содержимого файла непосредственно через STDIN.
$ grep 5 < <(cat file)
5
Здесь я демонстрирую, что содержимое файла
может быть направлено в grep
через STDIN выше.
-121--133869-
Этот вопрос вызвал у меня интерес, и я хотел следовать подходу, который я не смог точно выяснить и получил замечательную помощь после того, как я разместил в качестве другого вопроса . Вы можете понять подход, который я пытаюсь следовать из вопроса, который я опубликовал.
Я получил еще 2 решения для этой проблемы (одно из ответа Гнуца , которое является решением perl , и другое из решения Джона в сочетании с моим решением).
#The variable appended_input will remove spaces/tabs and just append the rows.
#Modify the file name in this line. Here I use inputfile as the filename.
appended_input=$(column -s '\t' inputfile | tr -d '[:space:]') ;
#The array variable will store each column-wise value as an array element.
#I use sort to find the number of unique elements.
array=($(
for ((i=0; i<6; i++))
do
new=${appended_input:$i:1}
for ((j=i+6; j<${#appended_input}; j=j+6))
do
new="$new${appended_input:$j:1}"
done
echo "$new"
done
)) | echo "${array[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' '
Тестирование
Мой входной файл выглядит следующим образом.
1 0 0 1 0 0
0 1 1 0 0 0
1 1 1 1 1 0
1 0 0 1 0 1
1 0 0 1 0 1
После выполнения вышеупомянутого сценария, я получаю выходные данные как,
00011 00100 01100 10111
Вы можете иметь wc -w
в качестве окончательного канала, и вы получите выходные данные как только 4 вместо уникальных значений столбцов, как выше.
-121--59021-
Можно изменить поле, отредактировав файл, или можно использовать usermod -c
, хотя в настоящее время оно называется полем comment
в man 5 passwd
, это было не всегда, это было поле GECOS в UNIX
название не отражает его использования: предоставление общей информации.
Правильное заполнение представляет собой разделенный запятыми список из четырех (возможных пустых) последовательностей. Вы по-прежнему видите это в том, как некоторые программы создают эту часть записи passwd, предварительно заполняя ее с помощью UserName,,,
.
Первое из этих полей должно содержать полное имя пользователя (или имя программы, если оно используется для демона и т.д.); второе физическое местоположение; третий (офисный) телефон; и четвертый домашний телефон (иногда телекс/факс).
Программы, такие как finger
, могут использоваться для отображения информации о лицах, включая структурированное содержимое этого поля. Я фактически использовал эту функцию (с желтыми страницами для получения информации на всех рабочих станциях) до появления LDAP и личных адресных книг.
Я придумал STAIL.SH
скрипт:
foldername=$(dirname $(pwd))
projname=$(basename $(pwd))
rsync -a --exclude-from=.rsyncrc $(pwd) $TMPDIR
cd $TMPDIR
zip -rq $foldername/$projname/dist/$projname-latest.zip $projname
cd $foldername/$projname
он находится в корневой папке, так что всякий раз, когда я хочу упаковать в Zip весь проект, я Беги Source Build.sh
И там он идет, в моей папке DIST / AS ProjectName -LATEST.ZIP