Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 对parsind数据仍使用sed的试验。_Bash_Sed - Fatal编程技术网

Bash 对parsind数据仍使用sed的试验。

Bash 对parsind数据仍使用sed的试验。,bash,sed,Bash,Sed,我有一份数据清单;它超越了自身的荒谬性——想象一下同样的列表——数十万行。然后添加一个真正以自我为中心、大量富有且有资格的销售行业,他们现在就想要这些信息!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 无论如何-因为A4和A4EU是列表中的最后一个,所以我当时决定根据这些值解析列表。我确实试着用开头的唯一标识符——9位数字来解析它。但是-唯一标识符的sed无效 sed -e s'/\d{9}/\n\d{9}/g /tmp/file 这不起作用

我有一份数据清单;它超越了自身的荒谬性——想象一下同样的列表——数十万行。然后添加一个真正以自我为中心、大量富有且有资格的销售行业,他们现在就想要这些信息!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 无论如何-因为A4和A4EU是列表中的最后一个,所以我当时决定根据这些值解析列表。我确实试着用开头的唯一标识符——9位数字来解析它。但是-唯一标识符的sed无效

sed -e s'/\d{9}/\n\d{9}/g /tmp/file 
这不起作用
所以我用A4的

231239987
HUBS
46,772
36,772
GOVSING
47.5080
UBS Sales
MONOHAJO
Market
0.00
06Jul15 08:59:18
XNYS
USD
Stock
A4 
231239966
FB
26,641
26,641
GOVSING
87.4324
UBS Sales
MONOHAJO
Market
0.00
06Jul15 08:58:55
XNAS
USD
Stock  
A4
231238664
CR
4,700
0
SIM
0.0000
UBS Sales
MONOHAJO
Market
0.00
06Jul15 08:53:42
XNYS
USD
Stock
A4EU
231238665
SCLN
211,000
186,795
LCFED
10.8647
UBS Sales
MONOHAJO
Limit
10.80
06Jul15 08:53:42  
XNAS
USD
Stock
A4EU
231237844 
VRA
41,900
33,900
ROYCE
11.2169
UBS Sales
MONOHAJO
Limit
11.25
06Jul15 08:40:25
XNAS  
USD
Stock
A4 
bash-3.2$
bash-3.2$
bash-3.2$
bash-3.2$ cat  /tmp/comeandplaywithus | tr "\n" " "  | sed 's/A4EU/A4\n/g' | sed 's/A4/A4\n/g' > /tmp/danny
bash-3.2$

这实际上是所需的行格式

231239987 HUBS 46,772 36,772 GOVSING 47.5080 UBS Sales MONOHAJO Market 0.00 06Jul15 08:59:18 XNYS USD Stock A4
231239966 FB 26,641 26,641 GOVSING 87.4324 UBS Sales MONOHAJO Market 0.00 06Jul15 08:58:55 XNAS USD  Stock
231238664 CR 4,700 0 SIM 0.0000 UBS Sales MONOHAJO Market 0.00 06Jul15 08:53:42 XNYS USD Stock A4EU
231238665 SCLN 211,000 186,795 LCFED 10.8647 UBS Sales MONOHAJO Limit 10.80 06Jul15 08:53:42 XNAS USD Stock A4EU
231237844 VRA  41,900 33,900 ROYCE 11.2169 UBS Sales MONOHAJO Limit 11.25 06Jul15 08:40:25 XNAS USD Stock A4
是否有一种方法可以在sed语句中通过A4进行解析。A4的解析确实导致了一些愚蠢,因为看看第2行——它不是以A$或A4EU结尾的。因此,有数千条线路没有这样做。无论如何,我试过这样的方法:

cat  /tmp/comeandplaywithus | tr "\n" " "  | sed 's/A4[EU]?/A4\n/g > /tmp/danny
一种方法是:

sed -E -n '/[0-9]{9}/{ h; b; }; H; /^A4(EU)?$/{ x; s/\n/ /g; p; }'
其他sed

在内存中加载整个

sed '1h;1!H;$!d
     x;s/\n/ /g;s/\(A4\(EU\)\{0,1\}\)[[:blank:]]\{1,\}\([0-9]\{9\}\)/\1\
\3/g' YourFile
流量版本(与
-u
一起使用)

awk

awk '/A4(EU){0,1}/ {print Record $0; Record="";next}
     {Record = Record " " $0}' YourFile

一些小的修正(但这改变了@User112638726的所有内容)

@capser如果你想找一个简明的教程,那么原版是一个很好的开始。到目前为止,
sed
仍然是最好的文本,IMHO。@capser:sed使用了两个缓冲区。默认情况下,您使用图案空间,但这里也使用保持空间。在两者之间移动文本总是让我想起编写汇编程序。也许是时候让您转向Perl或Python之类的东西了?这些都不行。首先,为什么你要在A4之前匹配数字,然后删除所有换行符,这样就只有一行了。第二个匹配A4在行首,但它永远不会在行首,因为在图案空间中,它前面有很多行。第三,打印前需要设置记录,否则会丢失A4/A4EU。很抱歉,由于BAU的原因,有点匆忙,值在第一个sed中反转,在第二个sed中是行的开始,而不是新行,并且忘记在awk中打印当前记录。由于@User112638726,更正完成
awk '/A4(EU){0,1}/ {print Record $0; Record="";next}
     {Record = Record " " $0}' YourFile