shell - 带有字符串前缀和后缀的 Unix 行到列格式

标签 shell unix

我需要将行字符串数据转换为列格式和特定​​于前缀/后缀的字符串。文件中的数据字符串有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/

相关文章:

xcode - 从 swift 代码运行终端 "scan"命令

c - Solaris : gdb a. 输出 > 运行 > 打开子 shell?

linux - 如何在 linux 终端上插入命令后显示下一行?

bash - autoconf 使用 sh,我需要 SHELL=BASH,如何强制 autoconf 使用 bash?

bash - 如何将脚本的输出作为参数传递给 ssh 命令?

linux - shell 条件问题

用于终止(关闭)与其窗口的所有 session 的 Linux 终端屏幕 CLI 命令

linux - 在 shell 脚本中用空格替换逗号

shell - 如何在 mac 上使用 Shell 脚本检查是否安装了 subversion

html - Nawk 脚本在 HTML 表上的错误输出