在行首添加数字

sim*_*mon 1 sed awk

我正在尝试根据该值向文件添加一个递增值,例如它在发现“E”时随时更改(可以用任何值替换)从我尝试过的一些在线研究中:

awk '/E/{sub("E", "E"++v)}1' output.txt > output2.txt
Run Code Online (Sandbox Code Playgroud)

但这只会在“E”本身之后增加一个增量值。不,这不是学校作业,这些数据接下来将被摄取到 MySQL 表中,该表的值为 ID 字段。注意:“E”将始终出现在数据集的末尾。这个文件(一个非常大的版本)将被摄取到 MySQL 表中,用于单词 unscrambler 应用程序。

示例文件:output.txt

aaa
aba
acaE
baa
bab
badE
caa
cab
cdeE
ddd
Run Code Online (Sandbox Code Playgroud)

示例文件:需要

awk '/E/{sub("E", "E"++v)}1' output.txt > output2.txt
Run Code Online (Sandbox Code Playgroud)

Qua*_*odo 5

你可以这样做:

awk '{print i $0}; /E$/{i++}' i=1 file
Run Code Online (Sandbox Code Playgroud)

我们设置i=1为初始值,因为默认情况下它是未设置的。{print i $0}印刷品i和整行$0。然后,只需检查该行是否匹配Ei在这种情况下递增。

??s??? 提出的一个非常相似的替代方案 是

awk '{print i+1 $0}; /E$/{i++}' file 
Run Code Online (Sandbox Code Playgroud)

总结1i,这样我们就不必初始设置i=1

  • 您也可以删除 `,` 而不是覆盖 `OFS`。 (2认同)
  • 以及删除`i=1`-`awk '{ print i+1 $0} /E$/ { i++ }' infile` 或者`awk '{ $0=i+1 $0} /E$/ { i++ } 1' infile` (2认同)