【问题标题】:script to change format of text [closed]更改文本格式的脚本[关闭]
【发布时间】:2016-02-09 22:31:49
【问题描述】:

我想更改一个文本文件,例如:

1
b 2
3
b 4

到:

a b
1 2
3 4

知道我该如何做到这一点吗?我不熟悉 awk,但我认为这是要走的路?

【问题讨论】:

  • 有很多方法可以在awkpythonperl 等中完成。如果他们需要声誉,这里有人可能为你写,但一般来说,在寻求帮助之前,您应该自己解决问题。
  • 感谢汤姆澄清它不知道这种问题不在这里。我会阅读 awk 指南,然后希望能得到答案。谢谢
  • 刚刚注意到我的帖子完全没有问题,数百万人在 stackoverflow 上提出此类问题,这里有一个示例:stackoverflow.com/questions/5429840/…
  • 嗨,彼得,是的,早在 2011 年就有人问过这个问题。总的来说,从那时起,人们似乎变得更加不耐烦了。我在 meta 上发布了关于这个问题的帖子,但没有引起很多讨论。
  • 嗨,好的,这是 2015 年的:stackoverflow.com/questions/33756062/…

标签: linux shell awk


【解决方案1】:

我假设输入总是两列,第一列包含 输出的列标题一遍又一遍地重复,并且 输出可能包含一列或多列。

$ cat t.awk
{ sep = (FNR % n == 0) ? "\n" : " " }
NR==FNR { printf $1 sep; if (sep == "\n") nextfile; next; }
{ printf $2 sep }

在调用 awk 时,输出列的数量用-v 设置。另请注意 输入文件需要在命令行上提供两次作为 脚本执行快速初始传递以打印输出列标题 在重新开始打印数据之前(懒得处理数组)。

两列输出:

$ cat file.txt
a 1
b 2
a 3
b 4
a 5
b 6

$ awk -v n=2 -f t.awk file.txt file.txt
a b
1 2
3 4
5 6

三列输出:

$ cat file2.txt
a 1
b 2
c 3
a X
b Y
c Z
a @
b #
c $

$ awk -v n=3 -f t.awk file2.txt file2.txt
a b c
1 2 3
X Y Z
@ # $

【讨论】:

    猜你喜欢
    • 2012-06-07
    • 2020-08-23
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多