繁体   English   中英

字符串拆分并提取bash中的最后一个字段

[英]String split and extract the last field in bash

我有一个文本文件FILENAME 我想在第一列字段的-处拆分字符串并从每一行中提取最后一个元素。 这里"$(echo $line | cut -d, -f1 | cut -d- -f4)"; 单独没有给我正确的结果。

文档名称:

TWEH-201902_Pau_EX_21-1195060301,15cef8a046fe449081d6fa061b5b45cb.final.cram
TWEH-201902_Pau_EX_22-1195060302,25037f17ba7143c78e4c5a475ee98e25.final.cram
TWEH-201902_Pau_T-1383-1195060311,267364a6767240afab2b646deec17a34.final.cram

我试过的代码:

while read line; do \
DNA="$(echo $line | cut -d, -f1 | cut -d- -f4)";
echo $DNA
done < ${FILENAME} 

结果我要

1195060301
1195060302
1195060311

请您尝试以下操作:

while IFS=, read -r f1 _; do    # set field separator to ",", assigns f1 to the 1st field and _ to the rest
    dna=${f1##*-}               # removes everything before the rightmost "-" from "$f1"
    echo "$dna"
done < "$FILENAME"

我不知道您的输入文件的限制,但是如果您要查找的是 10 位数字,并且每行只有一个 10 位数字......这应该很好

grep -Eo '[0-9]{10,}' input.txt
1195060301
1195060302
1195060311

这基本上是说:显示此文件中的所有 10 位数字

输入文件

TWEH-201902_Pau_EX_21-1195060301,15cef8a046fe449081d6fa061b5b45cb.final.cram
TWEH-201902_Pau_EX_22-1195060302,25037f17ba7143c78e4c5a475ee98e25.final.cram
TWEH-201902_Pau_T-1383-1195060311,267364a6767240afab2b646deec17a34.final.cram

好吧,我不得不处理这两行代码。 可能有人有更好的方法。

while read line; do \
DNA="$(echo $line| cut -d, -f1| rev)"
DNA="$(echo $DNA| cut -d- -f1 | rev)"
echo $DNA
done < ${FILENAME}

sed方法:

sed -nE 's/.*-([[:digit:]]+)\,.*/\1/p' input_file

sed选项:

  • -n :不打印整个文件,而只打印显式/p
  • -E :使用扩展正则表达式而无需转义其语法。

sed扩展正则表达式:

  • 's/.*-([[:digit:]]+)\\,.*/\\1/p' :搜索、捕获第 1 组中的一个或多个数字,前面是任何内容和一个破折号,后面跟一个逗号和任何东西,并只打印捕获的组。

使用 awk:

awk -F[,] '{ split($1,arr,"-");print arr[length(arr)] }' FILENAME

使用 , 作为分隔符,取第一个分隔的“片段”数据,并使用 - 作为分隔符和 awk 的拆分函数将其进一步拆分为 arr。 然后我们打印 arr 的最后一个索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM