从单独的文本文件中列出的 tsv 表中提取模式,并添加相应行中的前 5 个单元格

从单独的文本文件中列出的 tsv 表中提取模式,并添加相应行中的前 5 个单元格

我正在尝试使用列表从大型 tsv 表中提取一些特定条目。我还需要前 5 列中的相应数据。

列表文件.txt

条目123
条目532
条目685
条目555

...ETC...

表.tsv

第 1 列 列2 第 3 列 第 4 列 col5 第 6 栏 7 号栏 8 号栏 第 9 栏 第 10 栏 ETC...
值1 值2 值3 值4 值5 条目787 值7 值7 值7 值7 ETC...
值1 值2 值3 值4 值5 值6 条目532 值7 值7 值7 ETC...
值1 值2 值3 值4 值5 值6 条目685 值7 值7 值7 ETC...
值1 值2 值3 值4 值5 条目999 值7 值7 值7 值7 ETC...
值1 值2 值3 值4 值5 值6 值7 条目123 值7 值7 ETC...
值1 值2 值3 值4 值5 值6 值7 值7 值7 条目555 ETC...
ETC... ETC... ETC... ETC... ETC... ETC... ETC... ETC... ETC... ETC... ETC...

输出

第 1 列 列2 第 3 列 第 4 列 col5 第 6 栏
条目123 值1 值2 值3 值4 值5
条目532 值1 值2 值3 值4 值5
条目685 值1 值2 值3 值4 值5
条目555 值1 值2 值3 值4 值5

我尝试过这个组合但不起作用。

grep -o -F -f listfile.txt table.tsv | awk '{print $1"\t"$2"\t"$3"\t"$4"\t"$5}' > output

我究竟做错了什么?多谢。

答案1

假设一个制表符分隔的文件如下所示,任何字段中都没有空格:

$ cat file
col1    col2    col3    col4    col5    col6    col7    col8    col9    col10   etc...
val1    val2    val3    val4    val5    entry123    val7    val7    val7    val7    etc...
val1    val2    val3    val4    val5    val6    entry532    val7    val7    val7    etc...
val1    val2    val3    val4    val5    val6    entry685    val7    val7    val7    etc...
val1    val2    val3    val4    val5    entry999    val7    val7    val7    val7    etc...
val1    val2    val3    val4    val5    val6    val7    val7    val7    entry555    etc...

和一个如下所示的列表文件:

$ cat listfile 
entry123
entry532
entry685
entry555

grep您可以使用和的组合来做您想做的事cut

$ grep -wf listfile -e 'col1' file | cut -f1-6
col1    col2    col3    col4    col5    col6
val1    val2    val3    val4    val5    entry123
val1    val2    val3    val4    val5    val6
val1    val2    val3    val4    val5    val6
val1    val2    val3    val4    val5    val6

首先,grep -wf listfile -e 'col1' file将打印包含以下单词之一的所有行listfile 作为一个单独的词,所以只要您的字段中没有空格,就意味着作为一个单独的字段。它还会打印标题,因为它是唯一匹配col1为单独单词的行。您需要对真实数据使用不同的单词,选择仅在标题中找到的内容

接下来,将其传递给cut -f1-6仅保留前 6 个字段的字段。

相关内容