将一行更改为列

时间:2018-01-30 13:59:27

标签: sh

我有一个这样的文件:

20180127200000
DEFAULT, Proc_m0_s1 
DEFAULT, Proc_m0_s2
DEFAULT, Proc_m0_s3
20180127200001
DEFAULT, Proc_m0_s1 
DEFAULT, Proc_m0_s2
DEFAULT, Proc_m0_s3

我想转换为:

20180127200000 DEFAULT, Proc_m0_s1 
20180127200000 DEFAULT, Proc_m0_s2
20180127200000 DEFAULT, Proc_m0_s3
20180127200001 DEFAULT, Proc_m0_s1 
20180127200001 DEFAULT, Proc_m0_s2
20180127200001 DEFAULT, Proc_m0_s3

时间戳每4行显示一次。

2 个答案:

答案 0 :(得分:1)

对于这种类型的任务,awk应该比shell循环更快更简单。

awk 'NR%4==1 { time=$1; next }
    { print time " " $0 }' file

NR是行号。如果模数为4的行号是1,请记住第一个字段但不要打印。否则,使用记住的值和空格作为前缀进行打印。

答案 1 :(得分:0)

iconvert() {
    while true; do
        read linePrefix || return 0
        for i in $(seq $((prefix_lines - 1))); do
            read line || return 0
            echo "$linePrefix" "$line"
        done
    done
}

您只需拨打iconvert即可:

prefix_lines=4
iconvert < file.txt

提供您想要的输出。