Bash:使用空行作为分隔符提取列

时间:2016-09-29 15:54:41

标签: bash

我有一个类似的文件:

1  
2  
3  
4  
5  

a  
b  
c  
d  
e  

想把它说成:

1 a  
2 b  
3 c  
4 d  
5 e  

在bash中有快速的方法吗?

4 个答案:

答案 0 :(得分:2)

pr是用于列举数据的工具:

pr -s" " -T -2 filename

答案 1 :(得分:1)

使用paste和流程替换:

$ paste -d " " <(sed -n '1,/^$/{/^$/d;p}' file) <(sed -n '/^$/,${//!p}' file)
1 a
2 b
3 c
4 d
5 e

答案 2 :(得分:1)

简单的bash脚本完成工作:

nums=()
is_line=0
cat ${1} | while read line
do
    if [[ ${line} == '' ]]
    then
        is_line=1
    else
        if [[ ${is_line} == 0 ]]
        then
            nums=("${nums[@]}" "${line}")
        else
            echo ${nums[0]} ${line}
            nums=(${nums[*]:1})
        fi
    fi
done

运行方式如下:./script filename

示例:

$ ./script filein
1 a
2 b
3 c
4 d
5 e

答案 3 :(得分:0)

$ rs 2 5 <file | rs -T
1  a
2  b
3  c
4  d
5  e

如果您希望关闭额外的分隔符空间,请在后者-g1中使用rs。说明:

  • 以5列和2行
  • 打印file
  • -T转置它