linux-如何用逗号分割列表而不是sp

我想用,分隔文本,而不是for foo in list中的。假设我有一个CSV文件CSV_File,其中包含以下文本:

Hello,World,Questions,Answers,bash shell,script

...

我使用以下代码将其拆分为几个词:

for word in $(cat CSV_File | sed -n 1'p' | tr ',' '\n')

do echo $word

done

它打印:

Hello

World

Questions

Answers

bash

shell

script

但我希望它用逗号而不是空格分隔文本:

Hello

World

Questions

Answers

bash shell

script

我如何在bash中实现这一目标?

7个解决方案

48 votes

将IFS设置为:

sorin@sorin:~$ IFS=',' ;for i in `echo "Hello,World,Questions,Answers,bash shell,script"`; do echo $i; done

Hello

World

Questions

Answers

bash shell

script

sorin@sorin:~$

Sorin answered 2020-07-29T02:47:50Z

46 votes

使用subshell替换来解析单词会撤消将空格放在一起的所有工作。

请尝试:

cat CSV_file | sed -n 1'p' | tr ',' '\n' | while read word; do

echo $word

done

这也增加了并行度。 在问题中使用subshell会强制完成整个subshell过程,然后才能开始遍历答案。 通过管道连接到子外壳(如我的回答),它们可以并行工作。 当然,这仅在文件中有很多行时才重要。

mkj answered 2020-07-29T02:47:30Z

17 votes

我认为规范的方法是:

while IFS=, read field1 field2 field3 field4 field5 field6; do

do stuff

done < CSV.file

如果您不知道或不在乎有多少个字段:

IFS=,

while read line; do

# split into an array

field=( $line )

for word in "${field[@]}"; do echo "$word"; done

# or use the positional parameters

set -- $line

for word in "$@"; do echo "$word"; done

done < CSV.file

glenn jackman answered 2020-07-29T02:48:14Z

10 votes

kent$ echo "Hello,World,Questions,Answers,bash shell,script"|awk -F, '{for (i=1;i<=NF;i++)print $i}'

Hello

World

Questions

Answers

bash shell

script

Kent answered 2020-07-29T02:48:30Z

7 votes

创建一个bash函数

split_on_commas() {

local IFS=,

local WORD_LIST=($1)

for word in "${WORD_LIST[@]}"; do

echo "$word"

done

}

split_on_commas "this,is a,list" | while read item; do

# Custom logic goes here

echo Item: ${item}

done

...这将产生以下输出:

Item: this

Item: is a

Item: list

(注意,此答案已根据一些反馈进行了更新)

Andrew Newdigate answered 2020-07-29T02:48:58Z

5 votes

阅读:[http://linuxmanpages.com/man1/sh.1.php]&[http://www.gnu.org/s/hello/manual/autoconf/Special-Shell-Variables.html]

IFS内部字段分隔符,用于单词拆分 扩展后,将行与单词拆分成单词 内置命令。 默认值为``''。

IFS是一个Shell环境变量,因此它将在Shell脚本的上下文中保持不变,但在其他情况下将保持不变,除非您将其导出。 还请注意,IFS根本不会从您的环境继承:请参阅此gnu帖子,以获取有关IFS的原因和更多信息。

您的代码是这样写的:

IFS=","

for word in $(cat tmptest | sed -n 1'p' | tr ',' '\n'); do echo $word; done;

应该可以工作,我在命令行上对其进行了测试。

sh-3.2#IFS=","

sh-3.2#for word in $(cat tmptest | sed -n 1'p' | tr ',' '\n'); do echo $word; done;

World

Questions

Answers

bash shell

script

Ashley Raiteri answered 2020-07-29T02:49:37Z

0 votes

您可以使用:

cat f.csv | sed 's/,/ /g' | awk '{print $1 " / " $4}'

要么

echo "Hello,World,Questions,Answers,bash shell,script" | sed 's/,/ /g' | awk '{print $1 " / " $4}'

这是用空格替换逗号的部分

sed 's/,/ /g'

ozma answered 2020-07-29T02:50:05Z

linux 逗号分隔,linux-如何用逗号分割列表而不是sp相关推荐

  1. matlab中使用逗号分割列表简化代码

  2. java 文件读取 逗号分隔_如何用逗号(,)作为R中的分隔符读取csv文件

    我正在尝试在R.中读取此csv文件 . (scores.csv) ALVO,P,Prediction,fold 1,0.9079557994069131,"1",0 1,0.432 ...

  3. linux perl模块检测,Linux有问必答:如何用Perl检测Linux的发行版本

    提问:我需要写一个Perl程序,它会包含Linux发行版相关的代码.为此,Perl程序需要能够自动检测运行中的Linux的发行版(如Ubuntu.CentOS.Debian.Fedora等等),以及它 ...

  4. linux对当前使用的分区分割,实例解说Linux中fdisk分区使用方法

    一.fdisk 的介绍 fdisk - Partition table manipulator for Linux ,译成中文的意思是磁盘分区表操作工具:本人译的不太好,也没有看中文文档:其实就是分区 ...

  5. 详细介绍Linux shell脚本系列基础学习(列表)

    本系列适合Linux初学者,属于Linux入门级教程,主要介绍了Shell的分类.语法格式以及脚本的使用和编写格式等. 不断更新中,是Shell学习的必读经典教程.现主要包含以下文章: Linux S ...

  6. linux中split分割文件打开方式,Linux系统下使用split命令分割大文件 (转载)

    [小蜗牛闲情之作 ] 我想给一个朋友传一个大视频,有几百M,尝试多种传输办法失败后,最后想到的是把视频切开一片片"邮递"过去给他,让它自己组装起来吧. [root@pps publ ...

  7. 解决 linux du: Argument list too long 参数列表过长的办法

    解决 linux du: Argument list too long 参数列表过长的办法 免费领取满减阿里云红包 需求:需要查看一类文件得总大小 问题如下图: 解决方法: 1.使用xargs命令 f ...

  8. Linux下推荐的常用应用程序列表

    Linux下推荐的常用应用程序列表 一,网页浏览 1,firefox firefox是现在最火的一个浏览器,支持好多扩展和插件,也有很多漂亮的主题.firefox就是mozilla-firefox,他 ...

  9. Linux使用命令移动文件夹,linux虚拟机中如何用命令来移动文件夹

    对于新手来说,经常会碰到如何移动linux系统中的文件夹之类的问题,这些命令都很简单,关键在于熟能生巧,接下来跟着小编一起学习一下如何在装有linux的虚拟机中进行文件夹的移动. linux虚拟机中如 ...

  10. linux 获取文件夹下文件信息,linux下获取文件夹下子文件列表

    linux下获取文件夹下子文件列表 预置条件: 1.只遍历当前目前,不遍历当前目录的子文件夹 2.根据用户提供的开始时间戳以及持续时间,返回在这个时间区间内被修改过的文件列表. 相关知识: 1.str ...

最新文章

  1. 关于使用sudo命令后找不到JAVA_HOME的问题
  2. Boost:双图bimap与range范围的测试程序
  3. C语言学习之通过指针变量调用它所指向的函数
  4. 白盒-CNN纹理深度可视化: 使用MIT Place 场景预训练模型
  5. k8s extender_Windows Home Server的Drive Extender的9种选择
  6. 学习笔记1-Linux1
  7. python 时间模块 time datetime calendar
  8. struts2 action中result参数详解
  9. 已解决:An error occurred at line: 1 in the generated java file The type java.io.ObjectInputStream canno
  10. deeplearning.ai——构建循环神经网络
  11. 浏览器提示:你的连接不是专用连接的解决方法
  12. 【安卓作业】星座查询小程序
  13. IAT-Hook 劫持进程Api调用
  14. 思科CCNA认证视频 CCNA视频 ccna最新题库 专题 复习资料
  15. Windows XP的定时关机命令
  16. 都快2021年了,居然还有人不会MECE
  17. AI时代——人工智能技术图谱,它来啦(机器学习+深度学习学习路线)
  18. codeforces 1635E-Cars (二分图染色+拓扑排序)
  19. 如何快速新建文件和文件夹
  20. 10款国外免费VoIP服务

热门文章

  1. python画正方形-用python画一个正方形
  2. 空间数据挖掘与空间大数据的探索与思考(五)
  3. 360安全卫士极速版修改浏览器主页
  4. 网页动画--鲜花爱心表白动画
  5. 中国大学MOOC-陈越、何钦铭-数据结构-习题解答-04 树(中)
  6. 怦然心动(Flipped)-2
  7. 计算机术语alu,计算机术语大全
  8. 网络通信学习(四)——通过接入网进入互联网内部,探索接入网和网络运营商
  9. Modern C++ JSON nlohmann::json 使用详解
  10. red5 1.0.7 集成tomcat 并且 进行整合 官方例子oflaDemo