次の形式のデータファイルがあります。
ソースファイル(説明の例.)
ALBANIA Duck 1000
BELGIUM CHARLEROI Donald Duck 10234
CYPRUS J. Mickey 567
csv
与えられた規則に従って情報を形式で抽出するためのLinuxスクリプト(Bash、Perlなど)を探しています。
- 初めてinフィールドには
csv
inのフルワードのみが含まれます。首都 - 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