我有几个文件.

cat收件箱文件1.文本

 20190130150000 #timestamp-1
     56   39
  P                                         A
  S-4 B                               4.     E     F      3
 -9999 -9999      6.99       0.000 -9999 -9999
 -9999 -9999      9.99       0.000 -9999 -9999
 20190130151000 #timestamp-2
     56   39
  P                                         A
  S-4 B                               4.     E     F      3
 -9999 -9999     6.99       0.000 -9999 -9999
 -9999 -9999     9.99       0.000 -9999 -9999
 20190130152000 #timestamp-3
     56   39
  P                                         A
  S-4 B                               4.     E     F      3
 -9999 -9999     6.99       0.000 -9999 -9999
 -9999 -9999     9.99       0.000 -9999 -9999

EOF

cat收件箱文件2.文本

 20190130150000 #timestamp-1
    33   55.3
  R                                         A
  S-4 B                                3.     E     F      3
 -9999 -9999     5.99       0.000 -9999 -9999
 -9999 -9999     7.99       0.000 -9999 -9999
 20190130151000 #timestamp-2
    33   55.3
  R                                         A
  S-4 B                                3.     E     F      3
 -9999 -9999     5.99       0.000 -9999 -9999
 -9999 -9999     7.99       0.000 -9999 -9999
 20190130152000 #timestamp-3
    33   55.3
  R                                         A
  S-4 B                                3.     E     F      3
 -9999 -9999     5.99       0.000 -9999 -9999
 -9999 -9999     7.99       0.000 -9999 -9999

EOF

我正在寻找awk脚本,以以下方式重新排列它:

将所有相同的时间戳及其后续行一起写入:

请注意:文件中没有这样的#timestamp单词,我只是为了易于理解而提到它.

因此愿望输出将是这样的:

cat out.文本

 20190130150000
     56   39
  P                                         A
  S-4 B                               4.     E     F      3
 -9999 -9999     6.99       0.000 -9999 -9999
 -9999 -9999     9.99       0.000 -9999 -9999
 20190130150000
    33   55.3
  R                                         A
  S-4 B                                3.     E     F      3
 -9999 -9999     5.99       0.000 -9999 -9999
 -9999 -9999     7.99       0.000 -9999 -9999
 20190130151000
     56   39
  P                                         A
  S-4 B                               4.     E     F      3
 -9999 -9999      6.99      0.000 -9999 -9999
 -9999 -9999     9.99       0.000 -9999 -9999
 20190130151000
    33   55.3
  R                                         A
  S-4 B                                3.     E     F      3
 -9999 -9999     5.99       0.000 -9999 -9999
 -9999 -9999     7.99       0.000 -9999 -9999
 20190130152000
     56   39
  P                                         A
  S-4 B                               4.     E     F      3
 -9999 -9999     6.99       0.000 -9999 -9999
 -9999 -9999     9.99       0.000 -9999 -9999
 20190130152000
    33   55.3
  R                                         A
  S-4 B                                3.     E     F      3
 -9999 -9999      5.99      0.000 -9999 -9999
 -9999 -9999     7.99       0.000 -9999 -9999

EOF

我的 playbook :

awk '
{
    if ($1 ~ /^[0-9]{14}$/) {
        timestamp = $1
        print timestamp
        next
    }
    print
}' file1.txt file2.txt

此脚本只是打印相同的输入.它不是打印欲望输出.

推荐答案

您可以将时间戳到内容的映射存储在数组中的第一个文件中,并在输出第二个文件的内容之前,从第二个文件中每个时间戳的缓存中输出相应的内容:

NR == FNR {
    if ($1 ~ /^[0-9]{14}$/) {
        if (timestamp)
            store[timestamp] = content
        timestamp = $1
        content = $0
    } else
        content = content RS $0
    next
}
FNR == 1 {
    store[timestamp] = content
}
$1 ~ /^[0-9]{14}$/ {
    print store[$1]
}
1

演示 : https://replit.com/@blhsing1/EcstaticDirtyParallelprocessing

Linux相关问答推荐

Linux/gcc中的文件创建时间系统调用

如何知道进程组中的所有进程是否都已收集?

Git在某些文件中添加回车符,尽管autocrlf已关闭

为什么当凭证助手设置为存储 SSH 远程存储库时 git pull 不使用 .git-credentials

为什么我在从 Linux 通过 telnet 发送 Ctrl-C 后停止接收数据?

将 Visual Studio C++ 项目迁移到 Linux 和 CMake

Linux 如何使用 PCID 的值?

docker rm 命令在具有相同操作系统的不同机器上返回不同的状态码

函数在 shell 脚本中抛出错误语法错误:} unexpected

使用 bash 在包含模式的 java 文件中查找行,然后替换该行的另一部分

RealUID,保存的 UID,有效的 UID.这是怎么回事?

是否可以在 Linux x86 GAS 程序集中创建没有系统调用的线程?

在 C 中检测 64 位编译

何时判断 EINTR 并重复函数调用?

如何在不包括可用空间的情况下创建光盘(sd 卡)的 .IMG 映像?

发出信号并中断比较

rm 没有释放磁盘空间

Linux 守护进程

如何编写 Mono 守护程序

通过 linux x86-64 函数调用保留了哪些寄存器