Как мне выбрать первый столбец из строки, разделенной табуляцией?
# echo "LOAD_SETTLED LOAD_INIT 2011-01-13 03:50:01" | awk -F'\t' '{print $1}'
Вышеупомянутое вернет всю строку строка, а не просто «LOAD_SETTLED», как ожидалось.
Обновление:
Мне нужно изменить третий столбец в значениях, разделенных табуляцией. и разрешено записывать в них данные в Linux.
/proc/$PID/fd/
Итак, я создал простой скрипт, перечисленный ниже, для проверки записи данных в STDIN
(и TTY
) скрипта из внешнего процесса.
#!/usr/bin/env python
import os, sys
def get_ttyname():
for f in sys.stdin, sys.stdout, sys.stderr:
if f.isatty():
return os.ttyname(f.fileno())
return None
if __name__ == "__main__":
print("Try commands below")
print("$ echo 'foobar' > {0}".format(get_ttyname()))
print("$ echo 'foobar' > /proc/{0}/fd/0".format(os.getpid()))
print("read :: [" + sys.stdin.readline() + "]")
Этот тестовый сценарий показывает пути к STDIN
и TTY
, а затем подождите, пока один из них напишет его STDIN
.
Я запустил этот сценарий и получил сообщения ниже.
Try commands below
$ echo 'foobar' > /dev/pts/6
$ echo 'foobar' > /proc/3308/fd/0
Итак, я выполнил команду echo 'foobar'> / dev / pts / 6
и echo 'foobar'> / proc / 3308 / fd / 0
с другого терминала. После выполнения обеих команд сообщение foobar
дважды отображается на терминале, на котором выполняется тестовый скрипт, но это все. Строка print ("read :: [" + sys.stdin.readline () + "]" )
не был выполнен.
Есть ли какие-либо способы записать данные из внешних процессов в STDIN
существующего процесса (или другие файловые дескрипторы), то есть вызвать выполнение строки print ( "read :: [" + sys.stdin.readline () + "]")
из других процессов?