我需要将行字符串数据转换为列格式和特定于前缀/后缀的字符串。文件中的数据字符串有4个主要的固定列(以“;”分隔),每一列又分为两部分(以“:”分隔)。
例如
源数据文件:
A100:T100;B100:T200;A200:T300;B200:T400
文件的输出应该是:
TABa:BatchID=A100:TagId=T100:ProcId=1
TABb:BatchID=B100:TagId=T200:ProcId=2
TABc:BatchID=A200:TagId=T300:ProcId=3
TABd:BatchID=B200:TagId=T400:ProcId=4
与此同时,我正在尝试使用以下代码:
String="A100:T100;B100:T200;A200:T300;B200:T400"
> File.txt
for deploy in $(echo $String | tr ";" "\n")
do
echo $deploy >> File.txt
done
cat File.txt | awk 'BEGIN { FS=":"; OFS=":" } NR==1{ print "TABa:BatchID="$1,$2 } NR==2{ print "TABb:BatchID="$1,$2 }'
最佳答案
printf
处理这个:
$ awk -F: '{sub(/\n/,""); printf "TAB%c:BatchID=%s:TagId=%s:ProcId=%i\n",(NR+96),$1,$2,NR }' RS=';' File.txt
TABa:BatchID=A100:TagId=T100:ProcId=1
TABb:BatchID=B100:TagId=T200:ProcId=2
TABc:BatchID=A200:TagId=T300:ProcId=3
TABd:BatchID=B200:TagId=T400:ProcId=4
工作原理
-F:
这会将字段分隔符设置为冒号:
:
。sub(/\n/,"")
这会删除换行符。
printf "TAB%c:BatchID=%s:TagId=%s:ProcId=%i\n",(NR+96),$1,$2,NR
这完成了所有工作。它利用记录号、
NR
以及第一和第二字段并打印您想要的输出。RS=';'
这告诉 awk 使用分号
;
作为记录分隔符。
关于shell - 带有字符串前缀和后缀的 Unix 行到列格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37217600/