【发布时间】:2019-10-04 20:41:56
【问题描述】:
我有一个超过 6000 行的 input.txt 文件。
如果一行 a 有超过 10 个单词,那么我希望它被拆分,但不是在第 10 个单词,而是第一个逗号字符出现的位置。并且,如果新行也有10个以上的单词,那么它也应该被拆分,并不断重复这个过程7次。
最终产品:没有超过 10 个单词和逗号的行,因为它们都已被拆分。
例子:
输入
Line 1: This is me, and my sample test line that I like to get working, and I want to be able to kick some ass while doing it
预期输出:
Line 1: This is me,
Line 2: and my sample test line that I like to get working,
Line 3: and I want to be able to kick some ass while doing it
我正在使用以下代码:
#! /bin/bash
for run in {1..7}
do
awk 'NF >= 10 {
sub (", ", ",\n")
}1' input.txt
done
此代码没有给出预期的结果。相反,我得到以下输出 7 次。
line 1: This is me,
line 2: and my sample test line that I like to get working, and I want to be able to kick some ass while doing it.
我倾向于 sed,但我不清楚某些事情。我看到了三种方法 1) 代码读取一行(比如 line7),它超过 10 个单词并以逗号分隔(但不检查新破坏的 like 是否超过 10 个单词)并移至下一行。在文件末尾,它会重复这个过程(比如 7 次)以确保新断行也在 10 个单词以下。然后,它接受这个过程的输出并做同样的事情,但有一个新的条件(例如单词“和”)。然后,它需要这个等的输出......我可以添加无穷无尽的条件。这是我更喜欢的方法。我也认为编码更容易。
第二种方法 2) 代码是否读取行,如果超过 10 个单词,它会在逗号处分解,然后如果仍然超过 10 个单词,它会在逗号处进一步分解,依此类推,直到少于 10 个单词。只有这样,它才会移动到下一行。我认为这就是 Ghoti 的代码所做的。但是添加附加条件很复杂。 3)第三种方法是:它在逗号处分行超过 10 个单词,然后在“and”处分行,以此类推。然后最后,整个过程被重复了几次。恕我直言,这也不是最好的方法。
有人可以帮忙吗。
提前谢谢你!
【问题讨论】:
-
你能清理一下你的样本输入和输出吗?目前还不清楚我们正在处理的真正文本是什么。还有......
$run变量将用于什么?您正在执行awk命令七次,但七次迭代似乎没有任何区别。您认为 bash for 循环会如何工作? -
你为什么不直接使用 gsub 而不是 sub?
-
如果你想让 awk 做七次,在你的 awk 程序中编写 for 循环。
-
老实说我不懂编程,我真的不明白你们在问我什么。我已经根据我在网上阅读的内容将其拼凑在一起。有人可以帮我做我需要做的事情吗?
-
@HenryM,如果您对上一个问题的回答不能完全解决问题,您无需提出单独的问题。您可以简单地说在 cmets 或更新现有问题。 stackoverflow.com/questions/58240415/…