我有一个*.csv文件。具有如下价值
"ASDP02","8801942183589"
"ASDP06","8801939151023"
"CSDP04","8801963981740"
"ASDP09","8801946305047"
"ASDP12","8801941195677"
"ASDP05","8801922826186"
"CSDP08","8801983008938"
"ASDP04","8801944346555"
"CSDP11","8801910831518"或者有时值如下所示
"8801989353984","KSDP05"
"8801957608165","ASDP11"
"8801991455848","CSDP10"
"8801981363116","CSDP07"
"8801921247870","KSDP07"
"8801965386240","CSDP06"
"8801956293036","KSDP10"
"8801984383904","KSDP11"
"8801944211742","ASDP09" 我只想把数值(例如8801989353984)放在第一列。有可能使用BASH脚本吗?
发布于 2016-12-16 17:21:51
Bash可以完成这项工作,但是awk可能是重新排列文件的一个更好的选择:
sample.csv:
"ASDP02","8801942183589"
"8801944211742","ASDP09"命令:
awk -F, 'BEGIN{OFS=","}{$1=$1;if(substr($1, 2, length($1) - 2) + 0 == substr($1, 2, length($1) - 2)){print $1,$2}else{print $2,$1}}' sample.csvsubstr($1, 2, length($1) - 2) + 0 == substr($1, 2, length($1) - 2)检查列是否为数字。如果是,则打印原行,否则切换column1和column2。输出:
"8801942183589","ASDP02"
"8801944211742","ASDP09"发布于 2016-12-16 17:50:38
Sed也是你的朋友
输入
cat 41189347
"ASDP02","8801942183589"
"ASDP06","8801939151023"
"CSDP04","8801963981740"
"ASDP09","8801946305047"
"ASDP12","8801941195677"
"ASDP05","8801922826186"
"CSDP08","8801983008938"
"ASDP04","8801944346555"
"CSDP11","8801910831518"脚本
sed -E 's/^("[[:alpha:]]+.*"),("[[:digit:]]+")$/\2,\1/' 41189347输出
"8801942183589","ASDP02"
"8801939151023","ASDP06"
"8801963981740","CSDP04"
"8801946305047","ASDP09"
"8801941195677","ASDP12"
"8801922826186","ASDP05"
"8801983008938","CSDP08"
"8801944346555","ASDP04"
"8801910831518","CSDP11"发布于 2016-12-16 18:30:58
awk去营救!
$ awk -F, -v OFS=, '$1~/[A-Z]/{t=$2;$2=$1;$1=t}1' file如果第一个字段有alpha字符,则交换第一列和第二列并打印。
https://stackoverflow.com/questions/41189347
复制相似问题