大文字ベースのデータ抽出の問題

大文字ベースのデータ抽出の問題

次の形式のデータファイルがあります。

ソースファイル説明の例.)

ALBANIA Duck 1000
BELGIUM CHARLEROI Donald Duck 10234
CYPRUS J. Mickey 567

csv与えられた規則に従って情報を形式で抽出するためのLinuxスクリプト(Bash、Perlなど)を探しています。

  • 初めてinフィールドにはcsvinのフルワードのみが含まれます。首都
  • 3番目の場所フィールドには以下がcsv含まれます。最後の入力フィールド(数値)
  • 2位フィールドには以下がcsv含まれます。残り中間部

したがって、予想される出力は次のようになります。

出力.csv

ALBANIA,Duck,1000
BELGIUM CHARLEROI,Donald Duck,10234
CYPRUS J.,Mickey,567

答え1

持ち運べる:

sed 's/\([^[:lower:]]*\) \(.*\) /\1,\2,/' < source.dat > output.csv

答え2

必要に応じて直接

sed -r 's/([[:upper:] .]+)\s+(.*)\s+([0-9]+)\s*$/\1,\2,\3/' file

ご覧のとおり、field1はそのまま残るため、スクリプトを簡素化できます。

sed -r 's/\s+(\w*[[:lower:]].*)\s+([0-9]+)\s*$/,\1,\2/' file

でも

sed -r 's/\s+(\w*[[:lower:]].*[^0-9])\s+/,\1,/' file

関連情報