Как решить проблему выравнивания столбцов в текстовом файле после копирования и вставки?

Как говорит @Prvt _Yadv в своем ответе, это работает, потому что есть 13 точек.

Наборы

First set: .............ABCDEFGHIJKLMNOPQRSTUVWXYZ
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ

Точка не является специальным символом, поэтому, если у вас есть точка во вводе, она тоже будет переведена. В имеющейся у меня версии trэто последний соответствующий символ во втором наборе, в данном случае этоM:

$ echo URYC ZR CYRNFR. | tr.............A-Z A-ZA-Z
HELP ME PLEASEM

(Я мог предположить, что другая версия trмогла бы использовать первый совпадающий символ в наборе 2, что дало бы A.)

Чтобы ответить на ваш второй вопрос , вам нужно еще 13 точек в первом наборе, чтобы «израсходовать» оставшиеся прописные буквы во втором наборе:

First set: .............ABCDEFGHIJKLMNOPQRSTUVWXYZ.............
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ

затем вы можете повторить шаблон:

First set: .............ABCDEFGHIJKLMNOPQRSTUVWXYZ..........................abcdefghijklmnopqrstuvwxyz
Second set: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz

, что дает нам:

tr.............A-Z..........................a-z A-ZA-Za-za-z

Итак,:

$ echo Uryc zr cyrnfr | tr.............A-Z..........................a-z A-ZA-Za-za-z
Help me please

Лично я думаю, что первый способ сделать это в вашем вопросе проще!

Первый способ также не преобразует никакие другие символы во входных данных. Например, сравните:

$ echo Uryc zr cyrnfr. | tr.............A-Z..........................a-z A-ZA-Za-za-z  
Help me pleasem

с

$ echo Uryc zr cyrnfr. | tr A-Za-z N-ZA-Mn-za-m
Help me please.
1
25.04.2020, 22:29
1 ответ

Проблема в том, что у вас 8 или 9 полей данных в file1и 5 или 6 в file2. Либо C3 9999это одно неправильно отформатированное поле или C410000должно быть два поля C4и 10000.

Для настройки форматирования в зависимости от количества полей вы можете

  • использовать две строки формата и переключаться между ними
  • сохранить количество элементов массива nпри разделении строки и взятии последнего три значения a[n-2], a[n-1],a[n]

awk '
  BEGIN{
    fmt1="%8s %6s%5s %7.3f %7.3f %7.3f %7.4f %7.4f %7.4f" ORS
    fmt2="%8s %11s %7.3f %7.3f %7.3f %7.4f %7.4f %7.4f" ORS
  }
  (getline line < "file 1") > -1{
    n=split(line, a)
  }
  NF<=3{ print; next }                                                     # print original line 
  NF==6{ printf fmt1, $1, $2, $3, $4, $5, $6, a[n-2], a[n-1], a[n]; next } # 6 + 3 fields
  { printf fmt2, $1, $2, $3, $4, $5, a[n-2], a[n-1], a[n] }                # 5 + 3 fields
' "file 2" > "file 3"

Выход:

...
 2500GRM     C3 9999  15.433   8.378   0.000  0.2372 -0.2989 -0.0758
 2500GRM     C410000  15.310   8.449   0.000  0.2603 -0.2492 -0.2394
 2501GRM     C110001  15.310   8.591   0.000  0.0887 -0.2458 -0.7014
 2501GRM     C210002  15.433   8.662   0.000 -0.0788  0.0598 -0.9619
...
1
19.03.2021, 02:25

Теги

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