如何使用 AWK 反转字段顺序?
我有一个具有以下布局的文件:
123,01-08-2006
124,01-09-2007
125,01-10-2009
126,01-12-2010
如何使用 AWK 将其转换为以下格式?
123,2006-08-01
124,2007-09-01
125,2009-10-01
126,2009-12-01
I have a file with the following layout:
123,01-08-2006
124,01-09-2007
125,01-10-2009
126,01-12-2010
How can I convert it into the following by using AWK?
123,2006-08-01
124,2007-09-01
125,2009-10-01
126,2009-12-01
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
第一次没有正确阅读问题。您需要一个字段分隔符,可以是破折号或逗号。一旦你有了,你可以使用破折号作为输出字段分隔符(因为它是最常见的)并使用连接来伪造逗号:
Didn't read the question properly the first time. You need a field separator that can be either a dash or a comma. Once you have that you can use the dash as an output field separator (as it's the most common) and fake the comma using concatenation:
纯 awk
sed
Bash
Pure awk
sed
Bash
不幸的是,我认为标准
awk
只允许一个字段分隔符,因此您必须预处理数据。您可以使用tr
来完成此操作,但如果您确实想要一个仅awk
的解决方案,请使用:此输出:
根据需要。
第一个
awk
将,
字符更改为-
,这样您就有四个用相同字符分隔的字段(这是我通常会使用的位)使用tr',''-'
)。第二个
awk
按您指定的顺序打印它们,同时更正字段分隔符。如果您使用的
awk
实现允许多个FS
字符,则可以使用如下内容:Unfortunately, I think standard
awk
only allows one field separator character so you'll have to pre-process the data. You can do this withtr
but if you really want anawk
-only solution, use:This outputs:
as desired.
The first
awk
changes the,
characters to-
so that you have four fields separated with the same character (this is the bit I'd usually usetr ',' '-'
for).The second
awk
prints them out in the order you specified, correcting the field separators at the same time.If you're using an
awk
implementation that allows multipleFS
characters, you can use something like:如果不需要 awk,你也可以使用 Perl:
If it doesn't need to be awk, you could use Perl too: