【发布时间】:2016-05-26 00:41:04
【问题描述】:
我的输入文件具有以下格式的内容,其中每一列由“空格”分隔
string1<space>string2<space>string3<space>YYYY-mm-dd<space>hh:mm:ss.SSS<space>string4<space>10:1234567890<space>0e:Apple 1.2.3.4<space><space>string5<space>HEX
“0e:Apple 1.2.3.4”之后有 2 个“空格”,因为该字段/列中没有第 14 位数字。整个“0e:Apple 1.2.3.4space”被视为该列的单个值。
在第 7 列中,10: 表示以下字符串中的字符数。
在第 8 列中,0e: 表示十六进制值 14。因此,十六进制值提到了后面字符串中的字符数。
喜欢:
"0e:Apple 1.2.3.4 "--> this is the actual value in 8th column without " "
(I've mentioned " " to show that the 14th digit is empty)
It's counted as
0e:A p p l e 1 . 2 . 3 . 4
| | | | | | | | | | | | | |
1 2 3 4 5 6 7 8 9 10 11 12 1314
让我们将输入文件的第一行视为:
string1 string2 string3 yyyy-mm-dd 23:50:45.999 string4 10:1234567890 0e:Apple 1.2.3.4 string5 001e
地点:
-
string1是第一列的值 -
string2是第二列的值 -
string3是第三列的值 -
yyyy-mm-dd第 4 次 -
23:50:50.999第 5 名 -
string3第 6 名 -
10:1234567890in 7 //最后没有空格,因为它有10位数字 -
0e:Apple 1.2.3.4在第 8 个 // 末尾的空格 -
string5在第9 -
001e第十名
预期输出:
string1,string2,string3,yyyy-mm dd,23:50:50.999,string3,1234567890,Apple_1.2.3.4,string5,30
要求:
- 消除第 7 列和第 8 列的计数 (
10:&0e:) -
Apple和1.2.3.4的空格 b/w 应替换为 "_" - 最后一列的十六进制值应转换为十进制值。
- 用 "," 替换列之间的“空格”
- 我在这里只在第 10 列使用了十六进制值。如果它在多个列中怎么办?有什么方法可以将其转换为特定于某些列?
我试过用这个:
$ cat input.txt |sed 's/[a-z0-9].*://g'
输出如下:
string1,string2,string3,yyyy-mm-dd,45.999,string4,1234567890,Apple,1.2.3.4,,string5,001e
【问题讨论】:
-
你确定你的意思是preceding吗?
-
所以,基本上,您并没有尝试自己做任何事情。您发布的
sed示例显然不适合您的要求(可能第一个除外)。而sed对于您想要做的事情来说还不够强大。sed大师可能会写一个两百行的程序来解决这个问题,但这会非常困难。 -
@MichaelVehrs 我的错。它是以下字符串。编辑它。谢谢! :)
-
@MichaelVehrs 是的。我的脚本只是第一个。我也可以用其他脚本做 4。但不确定如何处理 2,3 和 5。我们可以用 awk 来做吗? (逐个字符串解析?)