我有一个制表符分隔的文本文件。第二行是一行列标题。我想重现该文件,但删除每个列标题中的最后两个字符,第一个除外。我要删除的第一个字符始终是句点,第二个字符始终是数字,但可以是不同的数字(请参阅下面的示例)。我需要在Linux命令行中完成此操作以简化我的分析。也许使用sed,perl,grep,cut或其他命令的某种组合?
例如,
我有:
Constructed data file
Data s123.4 s567.8 s901.2
abcd 123456 789012 345678
efgh 901234 567890 123456
ijkl 789012 345678 901234
我想要:
Constructed data file
Data s123 s567 s901
abcd 123456 789012 345678
efgh 901234 567890 123456
ijkl 789012 345678 901234
我知道这可以通过以下方式在MS Excel中完成:
1.在第2行和第2行之间输入一个新行。 3
2.将列名从A2复制到A3
3.在B3中输入= LEFT(B2,LEN(B2)-2)
4.在整行上涂抹配方
5.复制行&粘贴为值
6.删除原始第2行
但是当然在Linux命令行中它会快得多!
答案 0 :(得分:0)
使用perl one-liner
perl -i -pe 's/\.\d\b//g if $. == 2' file.txt
切换:
-i
:编辑<>
个文件(如果提供了扩展程序,则进行备份)-p
:为输入文件中的每个“行”创建一个while(<>){...; print}
循环。 -e
:告诉perl
在命令行上执行代码。 <强>代码强>:
$. == 2
:检查当前行是否为第2行。s/\.\d\b//g
:删除文字末尾的所有.NUM
答案 1 :(得分:0)
通过GNU sed,
sed -r 's/([0-9]+)\.([0-9]+)/\1/g' file
仅限第二行试试,
sed -r '2s/([0-9]+)\.([0-9]+)/\1/g' file