![Korn/Bash Shell:如何将内容转换为以下格式?](https://linux22.com/image/135844/Korn%2FBash%20Shell%EF%BC%9A%E5%A6%82%E4%BD%95%E5%B0%86%E5%86%85%E5%AE%B9%E8%BD%AC%E6%8D%A2%E4%B8%BA%E4%BB%A5%E4%B8%8B%E6%A0%BC%E5%BC%8F%EF%BC%9F.png)
pid name tid mod state data
--------------------------------------------------------------------------------
39523 srv0051_0001_0 39642 20-10:59:28 Working 820000:500196:500077
43137 srv0051_0005_0 43156 20-10:59:28 Working 820000:4250501:840057
43895 srv0051_0006_0 43903 20-10:59:28 Working 820000:4250501:840057
47523 srv0051_0009_0 47547 20-10:59:28 Working 600005:4250501:4250846
48841 srv0051_0010_0 48851 20-10:59:28 Working 600005:4290000:4290000
58182 srv0051_0020_0 58188 20-10:59:28 Working 820000:4250501:840057
8297 srv0079_0008_0 8316 20-10:59:27 Working 600005:3070001:3050012
pid,name,tid,mod,state,appnbr,request,tasknbr,appctx,username
39523,srv0051_0001_0,39642,20-10:59:28,Working,820000,500196,500077
43137,srv0051_0005_0,43156,20-10:59:28,Working,820000,4250501,840057
43895,srv0051_0006_0,43903,20-10:59:28,Working,820000,4250501,840057
47523,srv0051_0009_0,47547,20-10:59:28,Working,600005,4250501,4250846
48841,srv0051_0010_0,48851,20-10:59:28,Working,600005,4290000,4290000
58182,srv0051_0020_0,58188,20-10:59:28,Working,820000,4250501,840057
8297,srv0079_0008_0,8316,20-10:59:27,Working,600005,3070001,3050012
答案1
sed '
# delete the 2nd line
2d
# remove any leading whitespace
s/^[[:blank:]]\+//
# on line 1, replace "data" with other words
1s/data/appnbr request tasknbr appctx username/
# replace any sequences of whitespace with comma
s/[[:blank:]]\+/,/g
# replace the 3rd and subsequent colons
s/:/,/3g
' file
s///3g
该操作所需的 GNU sed
答案2
尝试这个
grep -v "^-" test.txt | tr -s " " ',' | sed -e s/:/,/3g -e '0,/data/ s/data/appnbr,request,tasknbr,appctx,username/'
答案3
$ awk -f script.awk file.txt
pid,name,tid,mod,state,appnbr,request,tasknbr,appctx,username
39523,srv0051_0001_0,39642,20-10:59:28,Working,820000,500196,500077
43137,srv0051_0005_0,43156,20-10:59:28,Working,820000,4250501,840057
43895,srv0051_0006_0,43903,20-10:59:28,Working,820000,4250501,840057
47523,srv0051_0009_0,47547,20-10:59:28,Working,600005,4250501,4250846
48841,srv0051_0010_0,48851,20-10:59:28,Working,600005,4290000,4290000
58182,srv0051_0020_0,58188,20-10:59:28,Working,820000,4250501,840057
8297,srv0079_0008_0,8316,20-10:59:27,Working,600005,3070001,3050012
哪里script.awk
BEGIN { OFS = "," } # set output delimiter
NR == 1 {
# modify some fields of the header
$6 = "appnbr"
$7 = "request"
$8 = "tasknbr"
$9 = "appctx"
$10 = "username"
}
NR == 2 { next } # skip line 2
NR > 2 {
# split the sixth field on ":" and extend the record with the bits
split($6, a, ":")
$6 = a[1]
$7 = a[2]
$8 = a[3]
}
1 # print
答案4
这是我的awk
尝试。
awk 'BEGIN{print "id,name,tid,mod,state,appnbr,request,tasknbr,appctx,username"}NR>2{print $1","$2","$3","$4","$5","gensub(/:/,",","g",$6)}' file.txt
- NR>2 以便跳过记录号 1 和 2(标头)
- 用逗号打印 $1 到 $5 字段
- 不要打印字段 $6,而是将其打印为
:
替换为“,”