linux +从文本文件生成具有特定结构的新文件最好的选择是什么

linux +从文本文件生成具有特定结构的新文件最好的选择是什么

在我的 Linux 机器上,我有文件 orig-file.txt

此文件现在包含 4 个字段,但可能更少或更多(此文件由其他应用程序生成)

我需要建议 - 将 orig-file.txt 转换为 output-file.txt 文件的最佳选择是什么(可以通过 shell 脚本或 awk 等)

目标是将orig-file.txt文件翻译为output-file.txt(如下面我的例子),同时需要记住orig-file.txt中的字段数量可以更改为更多或更少

最好的选择是什么?(我很高兴得到真实的例子)

原始文件.txt

CREATE_TIMESTAMP              TELEPHONE_NUMBER             ID TYPE
-------------------           -------------------- ---------- -----------------
24-09-2009 16:17:45           33633333333                  20 other_mmm_phone
24-09-2009 17:45:07           33644444444                  20 other_mmm_phone
07-10-2009 10:45:49           12312312312                  20 legacyphone
07-10-2009 11:46:38           59320000043                  20 other_mmm_phone

输出文件.txt

CREATE_TIMESTAMP -> 24-09-2009 16:17:45
TELEPHONE_NUMBER -> 33633333333
ID               -> 20
TYPE             -> other_mmm_phone



---



CREATE_TIMESTAMP -> 24-09-2009 16:17:45
TELEPHONE_NUMBER -> 33633333333
ID               -> 20
TYPE             -> other_mmm_phone

---

通过 AWK 解决但不起作用 - :(

     awk 'FNR == 1 {
        for (i = 1; i <= NF; i++) {
            header[i] = $i
        }
     FNR > 2 {
        for (i = 1; i<= NF; i++) {
            print header[i], "->", $i
        }
        printf "\n\n\n%s\n\n\n", "--------"
     }'    output.csv
 awk: syntax error near line 5
 awk: illegal statement near line 5

答案1

What the best option to do that

您已经了解的工具可能是最好的。如果您熟悉 awk,那么 awk 就很好。如果您熟悉 perl、python、ruby 等,那么其中一个可能不错。对于看似微不足道的编程任务,选择您最喜欢的工具。

答案2

如果我想这样做,我会使用 Perl 脚本来完成。

  1. 从输入文件中读取第一行并将其保留为标题。
  2. 跳过一行。
  3. 继续逐行阅读。对于每一行,
    1. 使用 根据定义的分隔符来分割线split
    2. 根据所需的格式将返回值与头文件一起打印。

您需要在字段之间使用固定分隔符(例如)\t或固定长度的字段,以便能够可靠地拆分字段。

答案3

这将适应任意数量的字段。

awk 'FNR == 1 {
        for (i = 1; i <= NF; i++) {
            header[i] = $i
        }
     }
     FNR > 2 {
        for (i = 1; i<= NF; i++) {
            print header[i], "->", $i
        }
        printf "\n\n\n%s\n\n\n", "--------"
     }' inputfile

需要进行一些调整才能处理时间戳包含空格的情况。字段之间用什么分隔?如果只有制表符,那么您可以使用-F '\t'-F '\t+'

相关内容