linux - 将文件行排列成表格形式

标签 linux shell unix command-line

<分区>

这是我文件中的示例行:

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

关于linux - 将文件行排列成表格形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14539678/

相关文章:

Linux bash sleep 如果命令执行速度很快

php - Apache 无法访问我的主目录中的文件夹

c - pthread_create 的第三个参数需要哪种类型

在 bash 脚本中使用时拒绝访问 mysqldump

用于在特定搜索字符串模式之前和之后提取行的 Unix 命令

unix - cat 按什么顺序选择要显示的文件?

java - 使用 root Android 应用程序运行二进制文件

linux - 致命 : Module kvm_intel is in use

shell - 使用命令行列出Docker容器的端口

bash - xargs 命令在 'LINE_MAX' 断言上失败