awkスクリプトは値をifに置き換えます。

awkスクリプトは値をifに置き換えます。

パイプで区切られたファイルがあります。

d1000|1000
d1001|100
d1002|10
d1003|1
d1004|
d1005|

長さが4桁未満の場合は$2を修正し、スペースは変更せずにそのままにしたいと思います。

だからawkスクリプトで試してみてください。

BEGIN { FS="|"; OFS="\t" }

{
n=1100
{ if (length($2)!=4 && length($2)>0) {$2=++n}};

print $1, $2
}

ただし、同じ数字が印刷され続けます。

d1000   1000
d1001   1101
d1002   1101
d1003   1101
d1004
d1005

そして希望の出力

d1000   1000
d1001   1101
d1002   1102
d1003   1103
d1004
d1005

編集:以下は明確にフォーマットされた上記のコードですgawk -o-

BEGIN {
        FS = "|"
        OFS = "\t"
}

{
        n = 1100
        if (length($2) != 4 && length($2) > 0) {
                $2 = ++n
        }
        print $1, $2
}

ベストアンサー1

インデントがより一貫している場合は、エラーが明らかになる可能性があります。

BEGIN { FS="|"; OFS="\t" }
{
  n=1100
  {
    if (length($2)!=4 && length($2)>0) {
      $2=++n
    }
  };
  print $1, $2
}

n各レコードの外部中括弧内のすべての内容は無条件に実行されるため、各行に対して値がリセットされます。

初期化をnこのBEGINブロックに移動する必要があります。

BEGIN { FS="|"; OFS="\t"; n=1100 }
{
  {
    if (length($2)!=4 && length($2)>0) {
      $2=++n
    }
  };
  print $1, $2
}

または(より慣用的に)

BEGIN { FS="|"; OFS="\t"; n=1100 }
(length($2)!=4 && length($2)>0) {
  $2=++n
}
{
  print $1, $2
}

おすすめ記事