首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于条件的柱重排

基于条件的柱重排
EN

Stack Overflow用户
提问于 2016-12-16 17:16:01
回答 5查看 95关注 0票数 1

我有一个*.csv文件。具有如下价值

代码语言:javascript
复制
"ASDP02","8801942183589"

"ASDP06","8801939151023"

"CSDP04","8801963981740"

"ASDP09","8801946305047"

"ASDP12","8801941195677"

"ASDP05","8801922826186"

"CSDP08","8801983008938"

"ASDP04","8801944346555"

"CSDP11","8801910831518"

或者有时值如下所示

代码语言:javascript
复制
"8801989353984","KSDP05" 

"8801957608165","ASDP11" 

"8801991455848","CSDP10" 

"8801981363116","CSDP07" 

"8801921247870","KSDP07" 

"8801965386240","CSDP06" 

"8801956293036","KSDP10" 

"8801984383904","KSDP11" 

"8801944211742","ASDP09" 

我只想把数值(例如8801989353984)放在第一列。有可能使用BASH脚本吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-12-16 17:21:51

Bash可以完成这项工作,但是awk可能是重新排列文件的一个更好的选择:

sample.csv:

代码语言:javascript
复制
"ASDP02","8801942183589"
"8801944211742","ASDP09"

命令:

代码语言:javascript
复制
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.csv
  • substr($1, 2, length($1) - 2) + 0 == substr($1, 2, length($1) - 2)检查列是否为数字。如果是,则打印原行,否则切换column1和column2。

输出:

代码语言:javascript
复制
"8801942183589","ASDP02"
"8801944211742","ASDP09"
票数 0
EN

Stack Overflow用户

发布于 2016-12-16 17:50:38

Sed也是你的朋友

输入

代码语言:javascript
复制
cat 41189347
"ASDP02","8801942183589"
"ASDP06","8801939151023"
"CSDP04","8801963981740"
"ASDP09","8801946305047"
"ASDP12","8801941195677"
"ASDP05","8801922826186"
"CSDP08","8801983008938"
"ASDP04","8801944346555"
"CSDP11","8801910831518"

脚本

代码语言:javascript
复制
sed -E 's/^("[[:alpha:]]+.*"),("[[:digit:]]+")$/\2,\1/' 41189347

输出

代码语言:javascript
复制
"8801942183589","ASDP02"
"8801939151023","ASDP06"
"8801963981740","CSDP04"
"8801946305047","ASDP09"
"8801941195677","ASDP12"
"8801922826186","ASDP05"
"8801983008938","CSDP08"
"8801944346555","ASDP04"
"8801910831518","CSDP11"
票数 1
EN

Stack Overflow用户

发布于 2016-12-16 18:30:58

awk去营救!

代码语言:javascript
复制
$ awk -F, -v OFS=, '$1~/[A-Z]/{t=$2;$2=$1;$1=t}1' file

如果第一个字段有alpha字符,则交换第一列和第二列并打印。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41189347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档