Заменить данные в столбце в файле данными в строке из другого файла

Наверное, нет. Я не знаю наверняка об Arch, но для Fedora / RHEL я бы повторно запустил useradd и заставил UID / GID соответствовать. Или просто скопируйте / etc / skel в / home / me и исправьте разрешения.

2
30.11.2016, 14:09
3 ответа

Если вы не можете отсортировать файлы, используйте Awk, который (как join ) предназначен для обработки данных с разделителями.

В этом случае сначала передайте второй файл, чтобы построить таблицу поиска, а затем используйте таблицу поиска для изменения каждой строки первого файла по мере прохождения через него.

$ cat file2
1 0.5
2 0.3
3 0.2
$ cat file1
1    X   1    1.0
2    X   1    1.0
3    X   1    1.0
4    Y   2    1.0
5    Y   2    1.0
6    Z   3    1.0
$ awk 'NR==FNR {a[$1] = $2; next} {$4 = a[$3]} 1' file2 file1
1 X 1 0.5
2 X 1 0.5
3 X 1 0.5
4 Y 2 0.3
5 Y 2 0.3
6 Z 3 0.2
$
3
27.01.2020, 21:54

Используйте join :

join -1 3 -o 1.1,1.2,0,2.2 file1 file2

Вывод с предоставленными файлами:

$ cat file1
1    X   1    1.0
2    X   1    1.0
3    X   1    1.0
4    Y   2    1.0
5    Y   2    1.0
6    Z   3    1.0
$ cat file2
1 0.5
2 0.3
3 0.2
$ join -1 3 -o 1.1,1.2,0,2.2 file1 file2
1 X 1 0.5
2 X 1 0.5
3 X 1 0.5
4 Y 2 0.3
5 Y 2 0.3
6 Z 3 0.2
$ 

Обратите внимание, что оба входных файла должны быть отсортированы (для столбца вы хотите присоединиться к ним). Требуется лексикографическая сортировка, а не числовая, поэтому обязательно sort -n файлы правильно, если их больше десяти. (Вы можете снова прибегнуть к помощи после присоединения.)

2
27.01.2020, 21:54

Если вы не можете отсортировать ввод, тогда join не будет работать, но вместо этого вы можете использовать sed . Идея состоит в том, чтобы использовать sed один раз для преобразования fileB в сценарий, а затем передать этот сценарий обратно в sed для преобразования fileA.

Итак, в одной строке, используя стандартную подстановку команд оболочки POSIX:

sed -e "$(sed 's:^\([0-9]*\) \(.*\)$:s/\1  *[^ ]*$/\1    \2/:' file2)" file1
1
27.01.2020, 21:54

Теги

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