Я застрял в проблеме, которая может показаться не слишком сложной для опытных пользователей оболочки. Вот проблема.Замените столбец в файле столбцом из другого файла, сохраняя формат
У меня есть 2 файла:
FILE1 с форматом, как это:
ALPH 1 M GIF M 1 11.111 23.123 -4.412 1.00 0.00 A
ALPH 2 BA GIF M 1 22.222 78.251 -6.215 2.00 0.00 B
ALPH 3 C GIF M 1 22.223 46.321 -6.124 3.00 0.00 C
ALPH 4 D GIF M 1 23.333 15.214 -6.125 4.00 0.00 D
ALPH 5 AB GIF M 1 24.111 61.458 -8.214 5.00 0.00 E
ALPH 6 LM GIF M 1 25.333 78.214 -9.321 6.00 0.00 F
ALPH 7 BA GIF M 1 17.645 87.256 -9.365 7.00 0.00 G
ALPH 8 BA2 GIF M 1 14.125 19.365 -1.258 8.00 0.00 H
-
-
File2 с одной колонки:
-0.14
-0.47
-0.58
-0.69
-0.25
-0.69
-0.12
-0.44
Я хочу, чтобы заменить 11-й столбец в File1 с единственный столбец в файле2. Я делаю следующее
paste File1 File2 | awk '{$11=$13;$13=""}1' > output
Хотя он заменяет столбец просто отлично, это портит оригинальный формат File1, который я хотел бы сохранить. Поскольку вы можете видеть, что между всеми полями File1 существует различное количество пробелов, и я бы хотел сохранить это даже после замены $ 11.
Я пробовал несколько подходов, включая column
и printf
, но ни один из них не работает. Может быть, я делаю что-то неправильно.
Кто-нибудь знает, как я могу достичь желаемого результата, желательно с awk или sed?
Спасибо!
Рохит
Хорошая точка, пока некоторые пробелы в реальном файле1 не являются вкладками, которые были преобразованы в пробелы во время копирования/вставки. Я думаю, что я бы пошел с 'print substr ($ 0,1,62) v [FNR] substr ($ 0,67)', хотя, поскольку он немного проще, и он будет работать, даже если файл1 содержит вкладки, следующие за 11-м полем, поскольку он не заменяет пустое пространство. –
Вы считаете, что новые значения будут 5 символов? –
Нет, что существующие значения - 4 символа и что он хочет сохранить такое же количество пробелов, как раньше. Я вижу вашу точку зрения, но он может захотеть сохранить сумму ширины поля плюс ширину пробелов. –