Наверное, нет. Я не знаю наверняка об Arch, но для Fedora / RHEL я бы повторно запустил useradd
и заставил UID / GID соответствовать. Или просто скопируйте / etc / skel
в / home / me
и исправьте разрешения.
Если вы не можете отсортировать файлы, используйте 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
$
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
файлы правильно, если их больше десяти. (Вы можете снова прибегнуть к помощи после присоединения.)
Если вы не можете отсортировать ввод, тогда join
не будет работать, но вместо этого вы можете использовать sed
. Идея состоит в том, чтобы использовать sed
один раз для преобразования fileB в сценарий, а затем передать этот сценарий обратно в sed
для преобразования fileA.
Итак, в одной строке, используя стандартную подстановку команд оболочки POSIX:
sed -e "$(sed 's:^\([0-9]*\) \(.*\)$:s/\1 *[^ ]*$/\1 \2/:' file2)" file1