我有一个位于标签“{}”中的文件。需要将其转换为管道格式。
这是示例:
{Id USXXXXXX} {Code USXXXXX} {Desc abcd 6.000% 5/24}
预期结果1:
{Id|USXXXXXX} {Code|USXXXXX} {Desc|abcd 6.000% 5/24}
预期结果2:
Id|USXXXXXX|Code|USXXXXX|Desc|abcd 6.000% 5/24
答案1
这些对你有什么作用?
awk '{for(i=1; i<=NF; i++) {if ($i ~ /^{/) {printf("%s|", $i)} else {printf("%s ", $i)}} printf("\n")}' test.in
对于预期结果 1,以及
awk '{for(i=1; i<=NF; i++) {if ($i ~ /^{/) {printf("%s|", $i)} else {printf("%s ", $i)}} printf("\n")}' test.in | sed -e 's#^{##' -e 's#} {#|#g' -e 's#} $##'
为预期结果2。
答案2
也试试
awk -F"{" '{for (i=2; i<=NF; i++) sub (" ", "|", $i)}1' OFS="{" file
{Id|USXXXXXX} {Code|USXXXXX} {Desc|abcd 6.000% 5/24}
和
awk -F"{" '{gsub (/}( |$)/, ""); for (i=2; i<=NF; i++) sub (" ", "|", $i); sub (/\|/, "")}1' OFS="|" file
Id|USXXXXXX|Code|USXXXXX|Desc|abcd 6.000% 5/24
答案3
对于下面的结果 1 是命令
@praveen_2 ~]# echo "{Id USXXXXXX} {Code USXXXXX} {Desc abcd 6.000% 5/24}"| sed "s/{[A-Za-z]\{2,\}/&|/g"
输出
{Id| USXXXXXX} {Code| USXXXXX} {Desc| abcd 6.000% 5/24}
对于下面的 result2 是命令
echo "{Id USXXXXXX} {Code USXXXXX} {Desc abcd 6.000% 5/24}"| sed "s/\}//g"| sed 's/ {/|/g'| sed 's/^{//g'| sed 's/ [a-zA-Z]\{2,\}/|&/g'
输出
Id| USXXXXXX|Code| USXXXXX|Desc| abcd 6.000% 5/24