如何修剪两个分隔符之间的空格 - Unix

如何修剪两个分隔符之间的空格 - Unix

在文件中,我们有由 | 分隔的键和值对,我的请求是删除键对中的空格,如输入和输出中所示。示例:UTC 时间偏移 -> UTCTimeOffset

我尝试了不同的 sed 和 awk 命令,但无法获得正确的命令

输入:

LogID = AMQ11111.0.FDC|Date/Time = Wed April 14 2021 03:19:43 EET|UTC Time = 1618334334.03|UTC Time Offset = 660 (EFT)|

输出:

LogID = AMQ11111.0.FDC|Date/Time = Wed April 14 2021 03:19:43 EET|UTCTime = 1618334334.03|UTCTimeOffset = 660 (EFT)|

答案1

假设没有键或值包含嵌入|=字符:

awk 'BEGIN { ORS = RS = "|"; OFS = FS = " =" }{ gsub(" ", "", $1) }; NF > 1' file

这将输入视为一组用|- 分隔的记录。每条记录都使用=(空格+ =) 作为字段分隔符。

对于每条记录,第一个字段(您的键)中的空格将使用 删除gsub()。如果当前记录有多个字段,则将其打印(这是为了避免在末尾输出空记录而进行测试)。

输出末尾没有换行符。

不幸的是,我无法在 AIX 上测试它,但我认为它没有使用任何非标准awk功能。

答案2

在任何 Unix 机器上的任何 shell 中使用任何 awk:

$ cat tst.awk
BEGIN { FS=OFS="|" }
{
    for (i=1; i<NF; i++) {
        key = val = $i
        sub(/ *=.*/,"",key)
        sub(/[^=]*= */,"",val)
        gsub(/ /,"",key)
        $i = key " = " val
    }
    print
}

$ awk -f tst.awk file
LogID = AMQ11111.0.FDC|Date/Time = Wed April 14 2021 03:19:43 EET|UTCTime = 1618334334.03|UTCTimeOffset = 660 (EFT)|

上面假设您的任何字段都不能包含|并且每行以|.

相关内容