首页 > 解决方案 > 在特定列的连字符后保留部分字符串

问题描述

对于输入文件中的第 2 列,我想保留连字符后的部分。我尝试了一个cut命令,但不知道如何仅将其应用于第二列:

echo TCCCATATGGTCTAGCGGTTAGGATTCCT   1-230823 | cut -d - -f 2
230823

输入:

TCCCATATGGTCTAGCGGTTAGGATTCCT   1-230823
GCATTGGTGGTTCAGTGGTAGAATTCTC    2-172580

出去:

TCCCATATGGTCTAGCGGTTAGGATTCCT   230823
GCATTGGTGGTTCAGTGGTAGAATTCTC    172580

标签: unixawksedcut

解决方案


这应该可以帮助你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

推荐阅读