我需要一些关于如何提取一行特定字符串的帮助。
我有一个包含数千行的文件:
Eukaryota; Alveolata; Ciliophora; Intramacronucleata; Paramecium#
Eukaryota; Viridiplantae; Streptophyta; Embryophyta#
Bacteria; Cyanobacteria; Synechococcales; Acaryochloridaceae; Acaryochloris#
Eukaryota; Viridiplantae#
Bacteria; Proteobacteria; Alphaproteobacteria#
我想获得每一行的第一项和最后一项。所以输出将是:
Eukaryota; Paramecium#
Eukaryota; Embryophyta#
Bacteria; Acaryochloris#
Eukaryota; Viridiplantae#
Bacteria; Alphaproteobacteria#
我知道如何使用
获取第1列awk '{print$1}' fileIn > fileOut
但我不知道如何获取最后一项,因为它始终位于不同的列中。
我尝试添加#,然后在#with
之前保留XX个字符grep -E -o '.{X,X}PATTERN. fileIn > fileOut
输出如下: 莱; Sulfolobaceae;硫化# ; Thermoproteaceae; Caldivirga# 莱; Haloferacaceae;沃# Haloferacaceae; Haloquadratum# 生啤酒; Natrialbaceae; Natrialba#
但是我必须重复这个程序并删除;直到我只剩下最后一项。
我搜索是否有任何grep或awk选项来执行此操作,提取第1列和最后一列或仅提取附加到#的字符,但我找不到任何对我有用的工作。
我很感激有关如何继续的任何建议。
感谢。
答案 0 :(得分:2)
$ awk 'BEGIN{FS=OFS=";"}{print $1,$NF}' file
Eukaryota; Paramecium#
Eukaryota; Embryophyta#
Bacteria; Acaryochloris#
Eukaryota; Viridiplantae#
Bacteria; Alphaproteobacteria#
答案 1 :(得分:1)
由于您文件中的分隔符为;
,因此您还可以使用gsub(/;.*;/,";",$0)
过滤掉两个;
之间的字段,以获取第一个和最后一个字段。
$ awk '{gsub(/;.*;/,";")}1' fileIn > fileOut
$ cat fileOut
Eukaryota; Paramecium#
Eukaryota; Embryophyta#
Bacteria; Acaryochloris#
Eukaryota; Viridiplantae#
Bacteria; Alphaproteobacteria#
答案 2 :(得分:1)
awk '{print $1,$NF}' file
Eukaryota; Paramecium#
Eukaryota; Embryophyta#
Bacteria; Acaryochloris#
Eukaryota; Viridiplantae#
Bacteria; Alphaproteobacteria#
答案 3 :(得分:0)
您可以尝试以下Perl one liner
perl -aF';' -ne 'print "$F[0],$F[-1]"' test.txt
-a
自动拆分模式
-F';'
将分隔符设置为;
分割的数据存储在@F
数组
$F[0]
包含第一列(第一个索引)
$F[-1]
包含最后一列(最后一个索引)