【问题标题】:Merge rows together if : is present shell script如果存在 : 则将行合并在一起 shell 脚本
【发布时间】:2017-12-05 14:38:15
【问题描述】:

我在文本文件中有以下格式的数据。

desc            : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Mana
gement
ldesc            : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Man
agement (BCD-WQ-UIO, BCD-WQ-BN)
date                          :

我正在尝试获取以下格式的输出。

desc                          : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Management
ldesc                          : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Management (BCD-WQ-UIO, BCD-WQ-BN)

基本上,我希望任何有冒号但冒号后面的行都不应该被删除,如果任何行没有冒号,它应该与前一行合并,如果有的话,包括空格。

我尝试使用 awk,但无法继续。

问候。

【问题讨论】:

  • 可以合并3行以上吗?如果awk '/:$/{next} {ORS = /:/ ? "" : "\n"} 1' file 不起作用,则考虑提供更好的输入样本

标签: shell awk sed


【解决方案1】:

要将一行与前一行合并,必须避免打印换行符,直到您知道是否合并。到达文件末尾时不要忘记打印最后的换行符!

awk '/:./ { printf "%s", $0; pending=1; next }
     /:$/ { if (pending) printf "\n"; pending=0; next }
     pending { printf "%s\n", $0; pending=0 }
     END { if (pending) printf "\n" }' file

【讨论】:

  • 嗨,这个问题是它删除了所有新行。所以所有数据都在一行中。
  • 它似乎与问题中的测试数据一起工作。你能展示它所描述的数据吗?
  • 实际上,我发现了一个错误的极端情况,我现在已经相应地更新了代码。对此感到抱歉。
  • 仍然合并下一行,输出显示为单行。
  • 关于什么样本数据?就像我说的,我已经在问题中的样本上进行了测试。
【解决方案2】:

假设你的文件名exp1.txt

awk -F: 'length($2) { print $0 }' exp1.txt

你会得到你期望的结果!

我的输出:

(public)landpacks-MacBook-Pro:stackoverflow frank$ cat exp1.txt 
desc            : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Mana
gement
ldesc            : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Man
agement (BCD-WQ-UIO, BCD-WQ-BN)
date                          :
(public)landpacks-MacBook-Pro:stackoverflow frank$ awk -F: 'length($2) { print $0 }' exp1.txt 
desc            : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Mana
ldesc            : Abced ONE 12345678 Suites YUITREWQ & RTYUIO Man
(public)landpacks-MacBook-Pro:stackoverflow frank$ 

【讨论】:

  • 它不工作。可能是我不清楚数据。我再次更正了数据。
  • @user2854333 如果可行,请接受答案! tks~
  • 这不会将单独的无冒号行合并到前一行。
  • 这只会消除数据而不是合并它..对于一个我认为它有效的实例,但是当我将它传递给更大的数据集时它没有。
  • @user2854333 我无法理解您的问题,您对如此简单的描述者的期望结果!如果您可以上传更多数据或更多示例输入/输出,也许我们可以轻松修复!
猜你喜欢
  • 2021-04-04
  • 2021-11-15
  • 2021-09-06
  • 1970-01-01
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多