列ベースのテキストファイルで値を検索して挿入する

列ベースのテキストファイルで値を検索して挿入する

迷惑な問題があります。長い間存在しない退職金融システムからエクスポートされた古いテキストファイルがあります。一部のデータ行が破損し、誤った列に値が表示されます。

例:

123     99999 
123     87675 
65453   62 
123     64534

最初の列の値には5つの数字を含めないでください。2番目の列には常に5つの数字を含める必要があります。

これまで問題のある行を見つける方法を見つけました。

cat tempfile | grep -n '^[0-9][0-9][0-9][0-9][0-9]'

上記のような問題のある行の行番号を見つける方法を見つけたいと思います。

65463     62

....次に「123」とスペースまたはタブを挿入して、次のようにします。

123     65463     62 

可能な限り簡単な方法で、好ましくはBashでこれを行う方法です。

ポールの挨拶

答え1

awkここに非常に適しています

$ awk 'length($1)>3{$0 = "123\t" $0} 1' ip.txt
123     99999
123     87675
123     65453   62
123     64534
  • length($1)最初のフィールドの長さを提供します。
  • $0 = "123\t" $0この行の内容は必要に応じて変更されます。
  • 1コンテンツを印刷する慣用的な方法$0

答え2

sed -r 's/^[0-9]{5}/123\t&/' yourfile

完全一致文字列を表す&には、特殊文字を使用してください。sed

具体的には、この例ではsed -r拡張正規表現を有効にするために使用します。{ }

関連情報