修改字符串以删除字符

修改字符串以删除字符

我有一个文本文件,其中条形码位于第 18 列。我有兴趣从 TCGA 条形码中删除最后 16 个字符以获取一长串示例,或者我只想打印第 18 列字符串中的前 12 个字符到一个新列。文件的每一行中的字符都不同,因此我不能简单地使用 sed 命令来删除某个字符后面的字符。

例如:TCGA-2E-A9G8-01A-11D-A403-09 需要短接到 TCGA-2E-A9G8 并在新列中打印短接的 ID

我见过这样的回复: echo "${string:0:-16}" 我对编程非常陌生,所以我不确定如何针对超过 300,000 行并定向到特定列的电子表格自动执行此操作

答案1

使用awk

awk '{print substr($18,1,12)}' input

这将打印第 18 列的字符 1-12。这假设您的文本文件由空格分隔。但很可能不是。

对于 CSV:

awk -F, '{print substr($18,1,12)}' input

根据 Steeldriver 将此输出添加到新列的评论:

awk '{$(NF+1) = substr($18,1,12)} 1' input > output

不幸的是这会创建一个新文件。 gawk可以就地修改文件,但最好的办法是创建一个新文件,然后删除旧文件。

相关内容