以下数据必须转换为字符串
01 | 0101001001 | DD-01-001-001-001/57 | 1 | Vijay Raghavan | | 3096 | Govind Industries | | | | | | | | </EmployeeData>
使用下面的代码(在.awk文件中):
#BEGIN {FS ="\n" ; RS="[</EmployeeData>]"}
#{
#for (i=1; i<=NF; i++)
#print $i","
#}
没有输出。请帮忙。提前致谢。
答案 0 :(得分:2)
试试这个awk
awk -F"\n" -v RS="</EmployeeData>" '{$1=$1}1' file
01 | 0101001001 | DD-01-001-001-001/57 | 1 | Vijay Raghavan | | 3096 | Govind Industries | | | | | | | |
如果你喜欢,
作为分隔符:
awk -F"\n" -v RS="</EmployeeData>" '{$1=$1;gsub(/ \| /,",")}1' file
01,0101001001,DD-01-001-001-001/57,1,Vijay Raghavan,,3096,Govind Industries,,,,,,,,
答案 1 :(得分:2)
awk -v RS="" '{$1=$1}7' file
上述行会将所有行合并为一行,包括</EmployeeData>
答案 2 :(得分:1)
有几个潜在的问题。首先,使用的RS
的值与它想要匹配的文本不匹配(这就是没有输出的原因)。其次,print
会自动将换行符放在它打印的文本的末尾,因此无论如何输出都会在多行上。
以下脚本解决了这两个问题:
BEGIN {FS ="\n" ; RS="</EmployeeData>"}
{
for (i=1; i<=NF; i++)
printf "%s,",$i;
printf "\n";
}
答案 3 :(得分:0)
#
是awk comment-start字符。发布的.awk文件中的每一行都被注释掉,因此没有输出。此外,RS="[</EmployeeData>]"
未将RS设置为字符串</EmployeeData>
,因为我怀疑是需要的,它将其设置为列表< / E m p l o y e D a t
中的任何字符,由字符列表分隔符{{[]
提供1}}。
我认为这可能是你真正想要的(使用GNU awk进行多字符RS):
$ cat file
01 |
0101001001 |
DD-01-001-001-001/57 |
1 |
Vijay Raghavan |
|
3096 |
Govind Industries |
|
|
</EmployeeData>
02 |
0202002002 |
DD-01-001-001-001/57 |
1 |
Bob Shmobswort |
|
1234 |
Some Other Places |
|
|
</EmployeeData>
$ cat tst.awk
BEGIN{FS="[[:space:]]*[|][[:space:]]*"; OFS=","; RS="</EmployeeData>[[:space:]]*"}
{ $1=$1; print }
$ awk -f tst.awk file
01,0101001001,DD-01-001-001-001/57,1,Vijay Raghavan,,3096,Govind Industries,,,
02,0202002002,DD-01-001-001-001/57,1,Bob Shmobswort,,1234,Some Other Places,,,