[英]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.