Выберите определенный столбец каждого файла, вставки в новый файл

Я выяснил простой способ сделать то, что я хотел, таким образом, я отправлю его здесь как ссылку на других, которым, возможно, понадобилось бы что-то подобное.

Как многие люди отметили, если у Вас есть корневой доступ, очень трудно ограничить что-либо. Таким образом, идея состоит в том, чтобы ограничить корневой доступ. Мы можем использовать pam_usb модуль, чтобы сделать это. Мы можем настроить компьютер таким способом, которым карта с интерфейсом USB требуется, чтобы входить в систему как корень. См. учебное руководство на http://linuxconfig.org/linux-authentication-login-with-usb-device, который объясняет как.

Когда у нас больше нет неограниченного корневого доступа, мы можем ограничить или отключить Интернет/сети различными способами.

7
01.10.2014, 15:01
2 ответа

с вставка под ударом можно сделать:

paste <(cut -f 4 1.txt) <(cut -f 4 2.txt) .... <(cut -f 4 20.txt)

Со сценарием Python и любым количеством файлов ( python scriptname.py column_nr file1 file2... filen):

#! /usr/bin/env python

# invoke with column nr to extract as first parameter followed by
# filenames. The files should all have the same number of rows

import sys

col = int(sys.argv[1])
res = {}

for file_name in sys.argv[2:]:
    for line_nr, line in enumerate(open(file_name)):
        res.setdefault(line_nr, []).append(line.strip().split('\t')[col-1])

for line_nr in sorted(res):
    print '\t'.join(res[line_nr])
4
27.01.2020, 20:18

Следующий скрипт делает это с помощью awk. Я добавил для удобства Rownumber, который указывает количество строк в ваших файлах (R). Количество столбцов, которые вы хотели бы вставить, указан C.

directory=/your-directory/
r=4
c=20

for n in $(seq 1 $r); do
echo "$n" >> rownumber.txt
done

for n in $(seq 1 $c); do
awk '{ print $4}' /$directory/file-$n.txt > /$directory/output-$n.txt
done

paste /$directory/rownumber.txt /$directory/output-[1-$c]*.txt > /$directory/newfile.txt
2
27.01.2020, 20:18

Теги

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