基于大写单词的数据提取问题

基于大写单词的数据提取问题

我有一个以下格式的数据文件:

源文件(出于说明目的的示例.)

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

我正在寻找一个 Linux 脚本(Bash、perl 等等)来将信息提取为csv格式,并具有给定的规则:

  • 第一名in 字段csv仅包含 in 中的整个单词大写
  • 第三名中的字段csv包含最后一个输入字段(数字)
  • 第二名中的字段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

相关内容