【问题标题】:Add semicolon at the end of file when missing丢失时在文件末尾添加分号
【发布时间】:2020-01-07 12:33:56
【问题描述】:

我得到文件,其中包含可变数量的分号来分隔我的数据。 8 个强制列,用 7 个分号分隔 2 个非强制列(链接,是否存在),如果存在,文件中的 9 个分号(我需要)。

我的要求是测试文件中的所有行,测试是否有 7 个分号,然后在末尾添加 2 个分号。如果是 9 个分号,则什么也不做。

07/15/19 02:58:40 PM;toto2_UBD_FD_GPRS_GLBL_EXCP;TABLE;DATA;COMPLETE;BASE_TEST_DSA;0;0
07/15/19 02:58:40 PM;toto_UBD_FD_GPRS_GLBL_EXCP;TABLE;DATA;COMPLETE;BASE_TEST_DSA;37484032;253118
07/15/19 02:55:59 PM;UBD_FD_GPRS_GLBL_EXCP;TABLE;DATA;COMPLETE;BASE_TEST_DSA;37484032;253118
07/15/19 02:55:59 PM;UBV_FD_GSM_GLBL_EXCP;TABLE;DATA;COMPLETE;BASE_TEST_DSA;0;0
07/15/19 02:55:59 PM;UBV_FD_GSM_GLBL_EXCP;TABLE;DATA;COMPLETE;BASE_TEST_DSA;0;0;E1234;LIB1234

我想像这样的:

    while read line; do

        if [[ `awk -F ";" ' { print NF-1 }'` = "7" ]]; then

        sed '/;$/!s/$/;;/' $line

        fi
    done < TEST_FILE2.txt > TEST_FILE3.txt

【问题讨论】:

    标签: bash loops if-statement awk


    【解决方案1】:

    sed/awk 逐行处理文本文件,因此您不必 read line 并将该行传递给 awk 或/和 sed。

    试试这个:

    awk -F';' 'NF==8{$0=$0 ";;"}7' file
    

    【讨论】:

    • 这可能需要一些额外的解释。该操作(在{} 内部)正在利用awk 的功能,即将一个裸字符串列表连接在一起。最后的7 是一个非零条件,没有关联的操作。它可以是任何非零表达式; 1 比较典型。 awk 中未指定时的默认操作是 {print}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 2016-01-08
    相关资源
    最近更新 更多