2

我有一个具有这种格式的大文本文件:

80708730272

598305807640 45097682220

598305807660 87992655320

598305807890

598305808720

598305809030

598305809280

598305809620 564999067

598305809980

33723830870

如您所见,有一行数字,然后在某些情况下还有第二行。在文本文件(在 solaris 上)中,第二行位于第一行之下。我不知道他们为什么并排在这里。每当第二行有数字时,我想昏迷。

598305809620 564999067

让它像:

598305809620, 564999067

如果我也可以放一个分号';' 在每一行的末尾,这将是完美的。能否请你帮忙?我可以使用什么,基本上我该怎么做?

4

2 回答 2

1

我的第一直觉是sed而不是awk。它们都是优秀的工具。
不过,我找不到一种简单的方法来在单个正则表达式(“正则表达式”)中完成所有操作。毫无疑问,其他人会。
sed -i.bak -r "s/([0-9]+)(\s+[0-9]+)/\1,\2/g" filename.txt
sed -i -r "s/[0-9]+$/&;/g" filename.txt.bak
第一行负责处理具有两组数字的行,将其写入具有额外“.bak”文件扩展名的新文件,只是为了偏执(又名“良好做法”)并且不要冒险覆盖原始文件,如果你犯了一个错误。
第二行将分号附加到包含至少一个数字的所有行 - 例如,跳过空白行。它会覆盖 .bak 文件。
一旦您确认结果令人满意,请将您的原始文件替换为该文件。

如果您想详细了解这里发生的事情,请告诉我。

于 2013-08-11T18:04:47.890 回答
0

在这种情况下,awk 是你的朋友。试一试:

awk '{if (NF==2) printf "%s, %s;\n\n", $1, $2; else if (NF==1) printf "%s;\n\n", $1}' big_text.txt | cat > txt_file.txt

这应该会产生以下输出:

80708730272;

598305807640, 45097682220;

598305807660, 87992655320;

598305807890;

598305808720;

598305809030;

598305809280;

598305809620, 564999067;

598305809980;

33723830870;

希望对你有用!

于 2013-08-11T16:59:16.637 回答