Разделите столбец на два столбца bash Linux

#linux #bash

Вопрос:

Ввод

 1st row 
2nd row
3rd row

4th row
5th row
6th row
 

Желаемый Результат

 1st row 4th row
2nd row 5th row
3rd row 6th row
 

Я попробовал column , но, похоже, это не сработало.
Я пытаюсь сделать это без сценария bash, если это возможно.
Заранее спасибо!

Ответ №1:

С awk:

 awk 'BEGIN { cnt=1 } /^$/ { cnt  ;next } { if (cnt==1) { map1[cnt1  ]=$0 } else { map2[cnt2  ]=$0 } } END { for (i in map1) { print map1[i]" "map2[i]}}' file
 

Объяснение:

 awk 'BEGIN { 
             cnt=1                                            # Initialise a column counter to 1
           } 
      /^$/ { 
             cnt  ;                                            # When there is a blank line, increment the cnt variable
             next                                              # Skip to the next line
           } 
           { 
             if (cnt==1) {    
               map1[cnt1  ]=$0                                     # If cnt is equal to 1, set an array map1, with an index as an incrementing counter (cnt1) and the value as the actual data on the line ($0)
             } 
             else { 
               map2[cnt2  ]=$0                                     # If cnt not equal to 1, follow the same logic as before but use array map2 instead
             } 
           } 
       END { 
             for (i in map1) { 
               print map1[i]" "map2[i]                          # Loop through map1, printing the entries as well as the corresponding index entries for map2
             };
           }' file
 

Комментарии:

1. Извинения. Я изначально не понял вашего вопроса. Попробуйте с поправками,

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

3. Теперь это работает!! Спасибо! Я надеялся на более простое и чистое решение без сценариев, но, похоже, у меня нет другого выбора.

4. Не беспокойтесь. Если решение отвечает вашим потребностям, пожалуйста, найдите время, чтобы проголосовать и принять ответ

Ответ №2:

Я пытаюсь сделать это без сценария bash, если это возможно. Заранее спасибо!

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

 pr -t2 file.txt
 

Чтобы использовать пробел для разделения столбцов.

 pr -t2 -s' ' file.txt
 

Дополнительную информацию смотрите на справочных страницах pr .