別のテキストファイルにリストされているtsvテーブルからパターンを抽出し、その行に最初の5つのセルを追加します。

別のテキストファイルにリストされているtsvテーブルからパターンを抽出し、その行に最初の5つのセルを追加します。

リストを使用して大きなTSVテーブルから特定の項目を抽出しようとしています。また、最初の5列に対応するデータが必要です。

リストファイル.txt

アイテム123
アイテム532
アイテム685
アイテム555

...など...

テーブル.tsv

列1 2列 3列 4列 5列 6列 7列 8列 9列 列10 など...
値1 値2 値3 値4 値5 アイテム787 値7 値7 値7 値7 など...
値1 値2 値3 値4 値5 値6 アイテム532 値7 値7 値7 など...
値1 値2 値3 値4 値5 値6 アイテム 685 値7 値7 値7 など...
値1 値2 値3 値4 値5 アイテム999 値7 値7 値7 値7 など...
値1 値2 値3 値4 値5 値6 値7 アイテム123 値7 値7 など...
値1 値2 値3 値4 値5 値6 値7 値7 値7 アイテム 555 など...
など... など... など... など... など... など... など... など... など... など... など...

出力

列1 2列 3列 4列 5列 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つのフィールドのみを保持するフィールドに渡します。

おすすめ記事