我有一个文本文件,我想删除冒号之前的字符串。
txt文件:
jhu-usc.edu_.450.1.lvl-3.TA-LK-A4NW-01A-11D-A34E-05.txt:05556808 0.916496542
jhu-usc.edu_.450.1.lvl-3.TA-LK-A4NW-01A-11D-A34E-05.txt:08883127 0.891518088
jhu-usc.edu_.450.1.lvl-3.TA-LK-A4NW-01A-11D-A34E-05.txt:10537079 0.827900035
jhu-usc.edu_.450.1.lvl-3.TA-LK-A4NW-01A-11D-A34E-05.txt:12497728 0.90517593
jhu-usc.edu_.450.1.lvl-3.TA-LK-A4NW-01A-11D-A34E-05.txt:13195463 NA
jhu-usc.edu_.450.1.lvl-3.TA-LK-A4NW-01A-11D-A34E-05.txt:22240159 0.809459655
jhu-usc.edu_.450.1.lvl-3.TA-LK-A4NW-01A-11D-A34E-05.txt:27050343 NA
jhu-usc.edu_.450.1.lvl-3.TA-LK-A4NY-01A-11D-A34E-05.txt:05556808 0.816581048
jhu-usc.edu_.450.1.lvl-3.TA-LK-A4NY-01A-11D-A34E-05.txt:08883127 0.864387435
jhu-usc.edu_.450.1.lvl-3.TA-LK-A4NY-01A-11D-A34E-05.txt:10537079 0.565236625
期望的输出:
5556808 0.916496542
8883127 0.891518088
10537079 0.827900035
12497728 0.90517593
13195463 NA
22240159 0.809459655
27050343 NA
5556808 0.816581048
8883127 0.864387435
10537079 0.565236625
我尝试了sed 's/\.[^:]*$//' file
,但没有工作。
答案 0 :(得分:2)
sed
:
sed 's/^[^:]*://' file.txt
grep
:
grep -o '[^:]*$' file.txt
awk
:
awk -F: '{print $2}' file.txt
答案 1 :(得分:2)
您需要匹配最后一个:
并删除该部分:
sed 's/^.*://' file
请参阅online demo
模式详情:
^
- 行首.*
- 尽可能多的任何字符(这意味着到最后......):
- 冒号。答案 2 :(得分:1)
试试这个,这里“:”设置为字段的分隔符,NF代表最后一个字段。 sub用于从最后一个字段中删除前导零。(根据您所需的o / p)。但是,如果您不希望删除前导零,则只需从命令下方删除sub(/^0/,"")
。
awk -F: '{$0=$NF;sub(/^0/,"")}1' infile
5556808 0.916496542
8883127 0.891518088
10537079 0.827900035
12497728 0.90517593
13195463 NA
22240159 0.809459655
27050343 NA
5556808 0.816581048
8883127 0.864387435
10537079 0.565236625
答案 3 :(得分:1)
答案 4 :(得分:1)
不多说。使用冒号作为字段分隔符,我们只有2列可以处理。 首先开始通过sub删除前导零,然后打印第二列。
awk -F: '{sub(/^0/,"",$2);print $2}' file
5556808 0.916496542
8883127 0.891518088
10537079 0.827900035
12497728 0.90517593
13195463 NA
22240159 0.809459655
27050343 NA
5556808 0.816581048
8883127 0.864387435
10537079 0.565236625
答案 5 :(得分:1)
无需执行任何子删除前导零。我们可以使用正则表达式作为awk字段分隔符。
awk -F":(0+)?" '{print $2;}' <filename>