awk通过删除模式来过滤文件中的行
尝试使用awk通过删除模式来过滤文件中的行,awk,Awk,尝试使用awk删除IonCode\u 4位数字(始终为4位可能不同)并保留文件扩展名。下面的方法是最好的吗?谢谢:) 文件 1112233 ID_1234_000000-Control_z_zzzz_zz_zz_zz_zz_zz_zzz_zz-zzzz-zzz-zzz_zzzz_zzzz_zzz_zzz_zzz_zzz_zzz.txt 1112231 ID_1234_000000-Control_z_zzzz_zz_zz_zz_zz_zz_zzz_zz-zzzz-zzz-zzz_zzzz_z
awk
删除IonCode\u 4位数字(始终为4位可能不同)并保留文件扩展名。下面的方法是最好的吗?谢谢:)
文件
1112233 ID_1234_000000-Control_z_zzzz_zz_zz_zz_zz_zz_zzz_zz-zzzz-zzz-zzz_zzzz_zzzz_zzz_zzz_zzz_zzz_zzz.txt
1112231 ID_1234_000000-Control_z_zzzz_zz_zz_zz_zz_zz_zzz_zz-zzzz-zzz-zzz_zzzz_zzzz_zzz_zzz_zzz_zzz_zzz.txt
awk
awk '/_tn_/ {next} gsub ("^.*/|_.*$|IonCode_...._", "", $2)'f
当前
1112233 000000-Control
1112231 000000-Control
所需的
1112233 000000-Control.txt
1112231 000000-Control.txt
你能试试下面的吗。这是我所能想到的最简单的方法,虽然我们也可以通过提及字段的数量来实现,但这更像是数字的硬编码,所以我在这里采用了这种方法
awk '
{
sub(/[^_]*_/,"",$2)
sub(/[^_]*_/,"",$2)
sub(/_.*/,".txt")
}
1
' Input_file
使用sed
$ sed -E 's/ID_[0-9]{4}_([^_]+).*(\..*)/\1\2/' file
1112233 000000-Control.txt
1112231 000000-Control.txt
按1+空格或下划线分割记录,因此第四个字段将是您感兴趣的部分
awk -F '[[:space:]]+|_' '!/_tn_/{print $1,$4".txt"}' file
输出中缺少.txt
,看起来与当前相同。谢谢:)。@justagy,谢谢你让我知道现在是午夜,我正在手机上写代码:)不管怎样,我现在修好了,让我知道它现在怎么样了?你发布的脚本对你发布的示例输入没有任何意义<代码>/\u tn./{next}
不会起任何作用,甚至不清楚您希望的“^.*/|.*$| IonCode....
会匹配什么。所以不,我不得不说这不是最好的方法。您的描述中是否有IonCode
,示例中是否有ID
?如果是这样的话,它是否总是那样,或者它是否可能不是ID
?很抱歉,它总是ID\u 4数字(每次数字都会不同)。tn的tn
在某些行中不是全部,因此我将其包括在内以防万一。谢谢:)。