bash - 我怎样才能从文本中提取一些信息
问题描述
我有一个像这样的文本文件
sp|O15304|SIVA_HUMAN MPKRSCPFADVAPLQLKVRVSQRELSRGVCAERYSQEVFEKTKRLLFLGAQAYLDHVWDEGCAVVHLPESPKPGPTGAPRAARGQMLIGPDGRLIRSLGQASEADPSGVASIACSSCVRAVDGKAVCGQCERALCGQCVRTCWGCGSVACTLCGLVDCSDMYEKVLCTSCAMFET IGPDGR
tr|A0A1B1L9R9|A0A1B1L9R9_BACTU MNKQLFLASLKETQKSILSYACGAALYLWLLIWIFPSMVSAKGLNELIAAMPDSVKKIVGMESPIQNVMDFLAGEYYSLLFIIILTIFCVTVATHLIARHVDKGAMAYLLATPVSRVQIAITQATVLILGLLIIVSVTYVAGLVGAEWFLQDNNLNKELFLKINIVGGLIFLVVSAYSFFFSCICNDERKALSYSASLTILFFVLDMVGKLSDKLEWMKNLSLFTLFRPKEIAEGAYNIWPVSIGLIAGALCIFIVAIVVFKKRDLPL NKELFLKINIVGGLIFLVVSAYSFFFSCICNDERKALSYSASLTILFFVLDMVGKLSDKLEWM
我正在尝试将这两组的第三部分小写。我尝试了以下但不起作用
awk '{ gsub($3, tolower($3)); print $1"\t"$2}'
我有一台Mac,还有其他方法吗?
解决方案
使用读取声明为小写的变量。
在所有这些示例中,我打印了括在方括号 ( []
) 中的部分,以便您可以看到它是如何解析的,我只是在它们之间放置空格。您可以编辑所有这些。重要的部分是了解定义分隔的内容并将正确的部分放入将其小写的变量中。
declare -l three
while IFS='|' read -r one two three
do echo "[$one] [$two] [$three]"
done < infile
[sp] [O15304] [siva_human mpkrscpfadvaplqlkvrvsqrelsrgvcaerysqevfektkrllflgaqayldhvwdegcavvhlpespkpgptgapraargqmligpdgrlirslgqaseadpsgvasiacsscvravdgkavcgqceralcgqcvrtcwgcgsvactlcglvdcsdmyekvlctscamfet igpdgr]
[tr] [A0A1B1L9R9] [a0a1b1l9r9_bactu mnkqlflaslketqksilsyacgaalylwlliwifpsmvsakglneliaampdsvkkivgmespiqnvmdflageyysllfiiiltifcvtvathliarhvdkgamayllatpvsrvqiaitqatvlilglliivsvtyvaglvgaewflqdnnlnkelflkinivggliflvvsaysfffscicnderkalsysasltilffvldmvgklsdklewmknlslftlfrpkeiaegayniwpvsigliagalcifivaivvfkkrdlpl nkelflkinivggliflvvsaysfffscicnderkalsysasltilffvldmvgklsdklewm]
如果您只想要管道之后但空格之前的部分 - 并且格式一致 -
declare -l three
while IFS='| ' read -r one two three four
do echo "[$one] [$two] [$three] [$four]"
done < infile
[sp] [O15304] [siva_human] [MPKRSCPFADVAPLQLKVRVSQRELSRGVCAERYSQEVFEKTKRLLFLGAQAYLDHVWDEGCAVVHLPESPKPGPTGAPRAARGQMLIGPDGRLIRSLGQASEADPSGVASIACSSCVRAVDGKAVCGQCERALCGQCVRTCWGCGSVACTLCGLVDCSDMYEKVLCTSCAMFET IGPDGR]
[tr] [A0A1B1L9R9] [a0a1b1l9r9_bactu] [MNKQLFLASLKETQKSILSYACGAALYLWLLIWIFPSMVSAKGLNELIAAMPDSVKKIVGMESPIQNVMDFLAGEYYSLLFIIILTIFCVTVATHLIARHVDKGAMAYLLATPVSRVQIAITQATVLILGLLIIVSVTYVAGLVGAEWFLQDNNLNKELFLKINIVGGLIFLVVSAYSFFFSCICNDERKALSYSASLTILFFVLDMVGKLSDKLEWMKNLSLFTLFRPKEIAEGAYNIWPVSIGLIAGALCIFIVAIVVFKKRDLPL NKELFLKINIVGGLIFLVVSAYSFFFSCICNDERKALSYSASLTILFFVLDMVGKLSDKLEWM]
如果您想要的只是空格后的最后一位,那么默认分隔符就可以了。
declare -l three
while read -r one two three
do echo "[$one] [$two] [$three]"
done < infile
[sp|O15304|SIVA_HUMAN] [MPKRSCPFADVAPLQLKVRVSQRELSRGVCAERYSQEVFEKTKRLLFLGAQAYLDHVWDEGCAVVHLPESPKPGPTGAPRAARGQMLIGPDGRLIRSLGQASEADPSGVASIACSSCVRAVDGKAVCGQCERALCGQCVRTCWGCGSVACTLCGLVDCSDMYEKVLCTSCAMFET] [igpdgr]
[tr|A0A1B1L9R9|A0A1B1L9R9_BACTU] [MNKQLFLASLKETQKSILSYACGAALYLWLLIWIFPSMVSAKGLNELIAAMPDSVKKIVGMESPIQNVMDFLAGEYYSLLFIIILTIFCVTVATHLIARHVDKGAMAYLLATPVSRVQIAITQATVLILGLLIIVSVTYVAGLVGAEWFLQDNNLNKELFLKINIVGGLIFLVVSAYSFFFSCICNDERKALSYSASLTILFFVLDMVGKLSDKLEWMKNLSLFTLFRPKEIAEGAYNIWPVSIGLIAGALCIFIVAIVVFKKRDLPL] [nkelflkinivggliflvvsaysfffscicnderkalsysasltilffvldmvgklsdklewm]
推荐阅读
- java - 如何在 Linux 中不同的 java 版本之间切换?
- json - ARM 模板:在具有 Ips 数组的网络安全组中添加安全规则
- java - TestNG 中测试的可重用性
- angular - html中的三元表达式管道
- azure - Datafactory 映射数据流无法将日期时间格式化为 yyyy/MM/dd
- docker - 测试 Docker Compose 配置是否会启动的正确方法?
- typescript - 在 Aurelia-Typescript 中上传之前如何检查图像的大小和扩展名?
- windows - NSCP++ check_drivesize core Uknown 命令
- javascript - 拆分一个 JS 字符串,然后将其值分组到一个对象中
- c# - .NET CORE webapp 在 Windows NLB 的 IIS 上回收后的大量 close_wait