#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
.