我想知道是否可以使用sed来创建一个csv文件,方法是将多条线组合在一条由逗号分隔的单行上。
例如,我编写了一个sed语句来检索我想要的行。
sed -n -e '/ENTITIES/,/ENDSEC/p' | sed -n -e '/ 8/{n;p;}' -e '/ 10/{n;p;}' -e '/ 20/{n;p;}' -e '/ 11/{n;p;}' -e '/ 21/{n;p;}' < Test.txt > out.csv
产生输出;
0
4.93
9.04
27.9
23.4
0
34.56
0.77
66.65
19.50
0
55.26
47.29
53.42
19.75
0
-18.22
44.35
19.74
53.28
但我希望它输出;
0,4.93,9.04,27.9,23.4
0,34.56,0.77,66.65,19.50
0,55.26,47.29,53.42,19.75
0,-18.22,44.35,19.74,53.28
无论如何没有管道吗? Id而不是调用另一个命令,因为我处理的文件超过100密耳行左右。
提前感谢您的帮助!
要添加,这是输入文件的一部分;
更多东西
AcDbBlockEnd
0
ENDSEC
0
SECTION
2
ENTITIES
0
LINE
5
1B1
330
1F
100
AcDbEntity
8
0
100
AcDbLine
10
4.933855223957067
20
9.042372500389475
30
0.0
11
27.92566226775641
21
23.49207557886149
31
0.0
0
LINE
5
1B2
330
1F
100
AcDbEntity
8
0
100
AcDbLine
10
34.56437535704545
20
0.778745874786317
30
0.0
11
66.65564369957746
21
19.50612180407816
31
0.0
0
LINE
5
1B3
330
1F
100
AcDbEntity
8
0
100
AcDbLine
10
55.26446832764479
20
47.29118282642324
30
0.0
11
53.42718194719286
21
19.75092411476788
31
0.0
0
LINE
5
1B4
330
1F
100
AcDbEntity
ENDSEC
0
以下更多内容。
答案 0 :(得分:4)
像这样的东西可能是你正在寻找的东西,但正如杰拉帕所说,没有看到输入它有点猜测。
sed -n '
/ENTITIES/,/ENDSEC/p
/ 8/{n;h}
/ 10/{n;H}
/ 20/{n;H}
/ 11/{n;H}
/ 21/{n;H;g;s/\n/,/g;p}
' Test.txt > out.csv
评论:
sed -n '
/ENTITIES/,/ENDSEC/p
/ 8/{n;h} # store next line in hold space
/ 10/{n;H} # append next line to hold space (after newline)
/ 20/{n;H} # ditto
/ 11/{n;H} # ditto
/ 21/{n;H; # ditto
g; # put hold space into pattern space
s/\n/,/g; # substitute commas for newlines
p # print it
}
' Test.txt > out.csv
答案 1 :(得分:1)
将你的sed传输到
sed 'your long sed commnand' | paste -d, - - - - -
结果将是
0,4.93,9.04,27.9,23.4
0,34.56,0.77,66.65,19.50
0,55.26,47.29,53.42,19.75
0,-18.22,44.35,19.74,53.28
答案 2 :(得分:0)
感谢ooga!在我缺乏对持有空间与模式空间的理解之前,现在它已经变得清晰了!
sed -n '
/ENTITIES/,/ENDSEC/{
/ 8/{n;h;};
/ 10/{n;H;};
/ 20/{n;H;};
/ 11/{n;H;};
/ 21/{n;H;g;s/\n/,/g;p};
}
' < Test.dxf > out.csv