在这里使用Cygwin64。
这是我文件的摘录。注意product_id是 不是唯一的。
<tr>
<td product_id="LRZCQPLRQW">LRZCQPLRQW</td>
<td>Crate</td>
</tr>
<tr>
<td product_id="LRZCQPLRQW">LRZCQPLRQW</td>
<td>Crate</td>
</tr>
我想通过连接使product_id独一无二 QW之后的rownumber。
以下awk脚本执行我需要的操作,但它也会打印原始行
在新行下方。如果我排除{print $0}
,那么我只会获得 product_id 行。
awk '/LRZ/ {x=NR; print substr($0,1,33) x substr($0,34,12) x substr($0,46);} {print $0}' my_file.html
当前结果
<tr>
<td product_id="LRZCQPLRQW2">LRZCQPLRQW2</td>
<td product_id="LRZCQPLRQW">LRZCQPLRQW</td>
<td>Crate</td>
</tr>
<tr>
<td product_id="LRZCQPLRQW6">LRZCQPLRQW6</td>
<td product_id="LRZCQPLRQW">LRZCQPLRQW</td>
<td>Crate</td>
</tr>
期望的结果
<tr>
<td product_id="LRZCQPLRQW2">LRZCQPLRQW2</td>
<td>Crate</td>
</tr>
<tr>
<td product_id="LRZCQPLRQW6">LRZCQPLRQW6</td>
<td>Crate</td>
</tr>
答案 0 :(得分:4)
我不知道为什么到目前为止答案是如此复杂。这不是你需要的全部吗?
$ awk '{gsub(/LRZ[^"<]+/,"&"NR)}1' file
<tr>
<td product_id="LRZCQPLRQW2">LRZCQPLRQW2</td>
<td>Crate</td>
</tr>
<tr>
<td product_id="LRZCQPLRQW6">LRZCQPLRQW6</td>
<td>Crate</td>
</tr>
答案 1 :(得分:1)
如果您只想转到下一行输入,next
语句将使awk继续执行操作:
$ awk '/LRZ/ {print substr($0,1,33) NR substr($0,34,12) NR substr($0,46); next} {print $0}' file
<tr>
<td product_id="LRZCQPLRQW2">LRZCQPLRQW2</td>
<td>Crate</td>
</tr>
<tr>
<td product_id="LRZCQPLRQW6">LRZCQPLRQW6</td>
<td>Crate</td>
</tr>
或者,如果您愿意,您可以简单地否定您希望按原样打印原始行的模式:
$ awk '/LRZ/ {print substr($0,1,33) NR substr($0,34,12) NR substr($0,46)}
$0 !~ /LRZ/ {print $0}' file
<tr>
<td product_id="LRZCQPLRQW2">LRZCQPLRQW2</td>
<td>Crate</td>
</tr>
<tr>
<td product_id="LRZCQPLRQW6">LRZCQPLRQW6</td>
<td>Crate</td>
</tr>
这通常会更具惯用性地写为:
$ awk '/LRZ/ {print substr($0,1,33) NR substr($0,34,12) NR substr($0,46); next}1' file
使用next
语句和始终为真的模式1
,其默认操作是打印原始行。
答案 2 :(得分:1)
只需将next
作为最终命令添加到LRZ
处理部分,这将立即转到下一行:
/LRZ/{x=NR;print substr($0,1,33) x substr($0,34,12) x substr($0,46);next}{print $0}
答案 3 :(得分:1)
尝试关注awk一次,不要在此处硬编码任何位置值,只需替换“”和“&gt;”中的字母。
awk '/product_id/{sub(/\".[^"]*/,"&"NR);sub(/>.[^<]*/,"&"NR);} 1' Input_file
编辑:根据OP的请求在此处添加输出。
awk '/product_id/{sub(/\".[^"]*/,"&"NR);sub(/>.[^<]*/,"&"NR);} 1' Input_file
<tr>
<td product_id="LRZCQPLRQW2">LRZCQPLRQW2</td>
<td>Crate</td>
</tr>
<tr>
<td product_id="LRZCQPLRQW6">LRZCQPLRQW6</td>
<td>Crate</td>
</tr>