Как конкатенировать идентификатор, указанный в двух строках?

Ввод, где идентификатор, указанный двумя строками 1-2

L1_I L1_I C-14 <---| unique idenfier WWPTH WWPT WWPTH <---| on two rows 1 2 3 

Цель: как объединить строки?

 L1_IWWPTH L1_IWWPT C-14WWPTH <--- unique identifier 1 2 3 

Ps Я приму самое простое и изящное решение.

3 Solutions collect form web for “Как конкатенировать идентификатор, указанный в двух строках?”

Предполагая, что вход находится в файле с именем file :

 $ awk 'NR==1{for (i=1;i<=NF;i++) a[i]=$i;next} NR==2{for (i=1;i<=NF;i++) printf "%-20s",a[i] $i;print"";next} 1' file L1_IWWPTH L1_IWWPT C-14WWPTH 1 2 3 

Как это работает

  • NR==1{for (i=1;i<=NF;i++) a[i]=$i;next}

    Для первой строки сохраните все заголовки столбцов в массиве a . Затем пропустите остальные команды и перейдите к следующей строке.

  • NR==2{for (i=1;i<=NF;i++) printf "%-20s",a[i] $i;print"";next}

    Для второй строки напечатайте все заголовки столбцов, объединив их из первой и второй строк. Затем пропустите остальные команды и перейдите к следующей строке.

  • 1

    1 является критической стенографией awk для печати строки, как есть. Это делается для всех строк после секунд.

Разделимые столбцы с возможными отсутствующими столбцами

Если столбцы разделены табуляцией:

 awk -F'\t' 'NR==1{for (i=1;i<=NF;i++) a[i]=$i;next} NR==2{for (i=1;i<=NF;i++) printf "%s\t",a[i] $i;print"";next} 1' file 

Если вы планируете использовать python, вы можете использовать zip следующим образом:

 input = [['L1_I', 'L1_I', 'C-14'], ['WWPTH','WWPT','WWPTH'],[1,2,3]] output = [[i+j for i,j in zip(input[0],input[1])]] + input[2:] print output 

вывод:

 [['L1_IWWPTH', 'L1_IWWPT', 'C-14WWPTH'], [1, 2, 3]] 
 #!/usr/bin/awk -f NR == 1 { split($0, a) next } NR == 2 { for (b in a) printf "%-20s", a[b] $b print "" next } 1 
  • Python: назначение вывода печати переменной
  • Означает ли datetime.fromtimestamp (os.path.getctime ()) в Python значение, соответствующее часовому поясу?
  • Изменение даты и времени на отметку времени Unix в Python
  • Почему аргумент os.umask () инвертирован? (umask 0o000 делает chmod 0o777)
  • pyvenv-3.4 возвратил ненулевой статус выхода 1
  • Проверка запуска скрипта python в скрипте python
  • Обеспечение того, чтобы моя программа не выполняла одновременную запись файла
  • Как правильно обрабатывать и сохранять выключение системы (и SIGTERM), чтобы закончить работу в Python?
  • Python - лучший язык программирования в мире.