This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center
这是我文件中的一行示例:

42001232  2011-07-01  51  100001  0  100002  0  2011-07-02  51  100003  0  100004  0

我怎么安排成这样
42001232  2011-07-01  51  100001  0
42001232  2011-07-01  51  100002  0
42001232  2011-07-02  51  100003  0
42001232  2011-07-02  51  100004  0

除了第一列之外,所有列都从日期开始重复。
我需要把它整理成表格。另外,这里的分隔符是tab。

最佳答案

这里有一种使用awk的方法。跑步方式:

awk -f script.awk file

script.awk的内容:
BEGIN {
    FS=OFS="\t"
}
{
    for(i=2;i<=NF;i++) {
        if ($i ~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/) {
            for (j=i+2;j<=NF;j+=2) {
                if ($j ~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/) {
                    break
                }
                else {
                    print $1, $i, $(i+1), $j, $(j+1)
                }
            }
        }
    }
}

结果:
42001232    2011-07-01  51  100001  0
42001232    2011-07-01  51  100002  0
42001232    2011-07-02  51  100003  0
42001232    2011-07-02  51  100004  0

或者,这里有一行:
awk 'BEGIN { FS=OFS="\t" } { for(i=2;i<=NF;i++) if ($i ~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/) for (j=i+2;j<=NF;j+=2) if ($j ~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/) break; else print $1, $i, $(i+1), $j, $(j+1) }' file

10-07 16:25
查看更多