unix - 在特定列的连字符后保留部分字符串
问题描述
对于输入文件中的第 2 列,我想保留连字符后的部分。我尝试了一个cut
命令,但不知道如何仅将其应用于第二列:
echo TCCCATATGGTCTAGCGGTTAGGATTCCT 1-230823 | cut -d - -f 2
230823
输入:
TCCCATATGGTCTAGCGGTTAGGATTCCT 1-230823
GCATTGGTGGTTCAGTGGTAGAATTCTC 2-172580
出去:
TCCCATATGGTCTAGCGGTTAGGATTCCT 230823
GCATTGGTGGTTCAGTGGTAGAATTCTC 172580
解决方案
这应该可以帮助你awk
。只需将所有内容替换-
为第二列,然后打印该行(用所示样本编写和测试)。
awk '{sub(/.*-/,"",$2)} 1' Input_file
第二种解决方案:如果您想在awk
变量中提及字段编号;然后尝试:
awk -v field="2" '{sub(/.*-/,"",$field)} 1' Input_file
通用解决方案(处理多个字段值):如果 OP 需要在可以定义为awk
变量的多个字段中执行替换,请尝试以下操作。
awk -v field="2,3" '
BEGIN{
num=split(field,array,",")
for(i=1;i<=num;i++){ fields[array[i]] }
}
{
for(i=1;i<=NF;i++){
if(i in fields){ sub(/.*-/,"",$i) }
}
}
1' Input_file
推荐阅读
- java - 如何在 Runnable 对象中使用来自 RecyclerView 适配器的设置器?
- python - 如何在 rdflib 的 sparql 查询中获取令牌位置
- c# - 如何在以下上下文中进行某个 int 变量更改
- ios - 不明白“通话中的额外参数'repeatedValue'”
- c++ - C++ Makefile 错误 - 类链接在主文件中不起作用
- c++ - 读取文本文件时出现分段错误(核心转储)
- regex - 如何使用以下正则表达式验证以分号分隔的电子邮件组?
- c# - 在.net core 5.0中跨请求传递correlationID
- javascript - HTML/CSS 拖放 Div 捕捉到相对于鼠标的不正确位置
- ubuntu - 使用 Ubuntu 在 wsl 上配置 GHC 7.6.3 版安装时出错:加载共享库时出错:libgmp.so.3: