我有一个文件说测试,输出如下
vserver share-name path acl
TEST_SERVER TEST_SHARE_PATH /TEST/TESTSHAREPATH "test\testuser / Read","test\testuser1_R / Read","test\testuser2_RW / Change"
由于acl很大,它在vserver下的新行中正确对齐。但我希望这可以像这样进入acl。
vserver share-name path acl
TEST_SERVER TEST_SHARE_PATH /TEST/TESTSHAREPATH "test\testuser /Read",
"test\testuser1 R /Read",
"test\testuser1 RW / Change"
请帮助
答案 0 :(得分:2)
将GNU awk用于FPAT和gensub():
$ cat tst.awk
BEGIN { OFS="\t" }
NR==1 {
$1=$1
print
FPAT = "([^,]*)|(\"[^\"]+\")"
next
}
{
n = split(gensub(/ ".*/,"",1),f,/ /)
$1 = gensub(/[^"]+/,"",1,$1)
for (i=1; i<=NF; i++) {
for (j=1; j<=n; j++) {
printf "%s%s", f[j], OFS
}
print $i
delete f
}
}
$ awk -f tst.awk file | column -s$'\t' -t
vserver share-name path acl
TEST_SERVER TEST_SHARE_PATH /TEST/TESTSHAREPATH "test\testuser / Read"
"test\testuser1_R / Read"
"test\testuser2_RW / Change"
以上假设您的输入数据中没有标签。如果有,那么为OFS挑选一些其他角色。