前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 MobaXterm创建新文件时一定要注意这个问题!

使用 MobaXterm创建新文件时一定要注意这个问题!

作者头像
小汪Waud
发布2023-09-18 12:13:33
4230
发布2023-09-18 12:13:33
举报
文章被收录于专栏:小汪Waud

今天同门遇到这么一个报错,她的samplelist文件里有6 行,如下

代码语言:javascript
复制
SRR14316550
SRR14316551
SRR14316552
SRR14316553
SRR14316554
SRR14316555

但在使用如下命令的时候输出却出现了问题

代码语言:javascript
复制
cat samplelist | while read id ; do echo "${id}_1.fastq.gz"; done

输出为

代码语言:javascript
复制
_1.fastq.gz
_1.fastq.gz
_1.fastq.gz
_1.fastq.gz
_1.fastq.gz

为什么没有输出${id}的内容呢?

1为什么会出现此问题?

经过一番检索我发现,在使用命令行时,如果samplelist文件中的文本使用了DOS换行符(\r\n),则可能会导致输出结果不正确。

只需要使用 dos2unix 命令将samplelist文件中的换行符转换为Unix格式,然后再运行命令即可。

代码语言:javascript
复制
dos2unix samplelist

在 Unix/Linux 系统中,文件中的文本行使用一个单独的换行符(\n)来标记行的结束。而在 DOS/Windows 操作系统中,每一行的末尾会有两个字符来表示换行:一个回车符(\r),一个换行符(\n)。

因此,在 Linux 系统中处理来自 Windows 系统的文件时,换行符可能会导致输出结果不正确。使用 dos2unix 命令可以将文件中的回车符(\r)去除,使行末只剩下Unix格式的换行符 (\n), 这样在Linux上执行时就不会出现问题了。

2追根溯源

为了确定此问题出现的原因,我按照她的方法复现此问题。

首先她使用cat>samplelist创建文件samplelist。

创建完成后双击左侧的文件打开,直接在MobaTextEditor里编辑,并保存。

再查看samplelist的时候似乎看不出什么端倪,只有SRR1004出现在了用户名前面。

成功复现${id}无法输出的问题

根据我们前面的猜测,我们通过cat -A [Filename]来查看一下samplelist的换行符。

如上图所示,这是Windows形式的换行符, \r 对应符号 ^M ,\n 对应符号 $。

需要注意的是,使用vi编辑器的set list命令显示特殊字符是无法显示^M的,只有用vi的二进制模式( vi -b [FileName] )打开,才能够显示出 ^M。

3解决办法

  1. 老老实实用 Linux 的办法创建新文件;
  2. 使用dos2unix修改换行符。

4结语

MobaXterm 真的很方便,集成了编辑器、图形显示器、SFTP、进程监测等等,但我没想到也会因此致使报错,希望给使用 MobaXterm 的读者一个教训吧。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-03-19 11:07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小汪Waud 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1为什么会出现此问题?
  • 2追根溯源
  • 3解决办法
  • 4结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档