我有一个变量/文件(segment_size_date),它包含
11-Jul-2017 11:00,604;13-Jul-2017 10:00,604;它是存储过程(Oracle)的输出。
我想用';‘分隔内容,这样11-2017年7月-2017年11:00,604在一个变量中,但它是用空格分隔的。
for i in (echo $segment_size_date | sed "s/;/ /g")
do
echo "$i"
done我的输出就像
(11-Jul-2017) 1st line
(11:00,60413-Jul-2017) 2nd line
(10:00,604) 3rd line我期待的产出像
(11-Jul-2017 11:00,604) 1st line
(13-Jul-2017 10:00,604) 2nd line我希望它被存储在一个变量/文件中。例如,在第一个循环11-2017年7月-2017年11:00,604存储在一个文件/变量(我将处理它),下一个循环13-7月-2017年10:00,604存储(覆盖不是一个问题)。
我试过用引号,但没有运气。“11-2017年7月-2017年11:00 604”“13-2017年7月-2017年10:00 604”
还有一件事我不能在空格中插入任何东西,比如11-2017年7月-2017年11:00,604;13-7月-2017年10:00,604 --我不能在空格中插入任何东西(11-7月-2017年11:00),应该是这样的。。
而且该文件只是演示文件,它包含了许多行,因此不能使用裁剪-d";“-f1`,必须使用循环”。
Shell /bin/bash -- linux
发布于 2017-07-17 17:04:24
您可能只想对数据进行预处理,以便每个数据都在一条线上。如果您在多个文件中有多行,这就很容易了。
cat *-all-the-input-files | tr \; \\n | while read segment_size_data; do
...
done如果您的数据在变量中(如您的示例中所示),则如下所示:
$ d="11-Jul-2017 11:00,604;13-Jul-2017 10:00,604;"
$ printf "$d" | tr \; \\n | while read var; do echo v=$var; done
v=11-Jul-2017 11:00,604
v=13-Jul-2017 10:00,604发布于 2017-07-17 15:22:53
你可以使用awk:
awk -F\; '{ for (i=1;i<=NF;i++) { printf "%s\n",$i } }' filenameSet;作为awk的分隔符,然后打印每个字段(1到字段的数目),然后返回carrage。
发布于 2017-07-17 18:52:36
您只需暂时重置shell的IFS变量即可。该变量用于控制分词。
$ data='11-Jul-2017 11:00,604;13-Jul-2017 10:00,604;'
$ IFS=';' read startdate enddate somethingelse <<<"$data"
$ printf "%s\n" "$startdate" "$enddate" "$somethingelse"
11-Jul-2017 11:00,604
13-Jul-2017 10:00,604
$https://stackoverflow.com/questions/45147908
复制相似问题