迷惑な問題があります。長い間存在しない退職金融システムからエクスポートされた古いテキストファイルがあります。一部のデータ行が破損し、誤った列に値が表示されます。
例:
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
拡張正規表現を有効にするために使用します。{ }