0

次のようなファイルがあります。

A|\^&|||something|||||somethingelse|||XZXZXZXXZ-C5|2013  
B|1||||ccccX|||||||||||||||||HERE||||||||||  
C|1|rfrfrfrf||^^^hghghghg|3||||||||||8||||||||||B| |||||  
D|1|^^^grpou|word|||||C||adam||2013|0123|  
E|1|G  

B で始まる任意の行の 3 列目にテキスト QQQ を挿入したいと思います。いくつかのことを試してみましたが、いくつかのオプションがありますが、私の診断でそれを複雑にしすぎたと思います。

ここに私が思いつくことができると思っている結果があります:

A|\^&|||something|||||somethingelse|||XZXZXZXXZ-C5|2013  
B|1|QQQ|||ccccX|||||||||||||||||HERE||||||||||  
C|1|rfrfrfrf||^^^hghghghg|3||||||||||8||||||||||B| |||||  
D|1|^^^grpou|word|||||C||adam||2013|0123|  
E|1|G  

sed または awk ワンライナータイプの提案は素晴らしいでしょう。

4

4 に答える 4

3
awk 'BEGIN{FS=OFS="|"}/^B/{$3="QQQ"}1'

3 列目のテキストを上書きするのではなく (存在する場合) 先頭に追加する場合は、次のようにします。

awk 'BEGIN{FS=OFS="|"}/^B/{$3="QQQ"$3}1'

代わりに追加するには$3、 を反対側に移動します。

于 2013-10-31T21:08:46.697 に答える
1
awk -F'|' -v OFS="|" '/^B/{$3="QQQ"}7' file
于 2013-10-31T21:08:26.677 に答える
1

これは、各レコードの先頭にスペースがないことを前提としています。また、列 3 の既存の内容を置き換えます。

awk -F'|' -v OFS='|' '$1 ~ /^B/{$3="QQQ"};{print}' input.txt
于 2013-10-31T21:06:39.970 に答える