如何使用分隔符读取文件并使用Shell脚本基于分隔符逐行写入不同的文件

时间:2018-08-10 15:19:27

标签: shell ksh

我有一个要求,例如文件foo.txt,其中包含如下所示的键值对: vi foo.txt

a^1.0^b^2^cc^30^d^4^e^55^fg^67.0^h^8^i^99

,依此类推。 我必须编写一个shell脚本,将每个键值对放在不同的行中到不同的文件,例如goo.txt,其中包含:

a^1.0^
b^2^
cc^30^
D^4^
e^55^
fg^67.0^
h^8^
i^99^

我有一个类似的Perl脚本,但是我想要shell脚本。 Perl脚本就像

#! /usr/bin/perl -w
#
use strict;
use Getopt::Long;
my $filename     = "";
my $Tags         = "";
GetOptions ('file=s' => \$filename);
if (defined $filename and $filename ne "")
{
    open (my $DATA,$filename) or die $!;
    $Tags       = <$DATA>;
    while ($Tags =~ m/(.*?\^.*?\^)/g)
    {
      print "$1\n";
    }
    close($DATA)
}

我想要一个使用Shell脚本的类似代码。需要帮助来编写符合我要求的shell脚本(ksh)。

2 个答案:

答案 0 :(得分:0)

cat filename | awk -F"^" '{split($0, a, "^"); for(i=1;i<NF;i=i+2){print a[i]"^"a[i+1]"^"}}'

答案 1 :(得分:0)

您希望每秒钟^后再添加一个换行符。
字段没有^,不是^的字符可以写为[^^]
每两个字段(不包括^的任意数量的字母,后跟一个^), 应该用匹配项代替,然后换行。

sed 's/[^^]*^[^^]*^/&\n/g' foo.txt