Text-Processing

選擇每個文件的特定列,粘貼到新文件

  • September 21, 2020

我有 20 個具有相同行數的製表符分隔文件。我想選擇每個文件的第 4 列,並粘貼到一個新文件中。最後,新文件將有 20 列,每列來自 20 個不同的文件。

如何使用 Unix/Linux 命令執行此操作?

輸入,相同格式的 20 個。我希望文件 1 的第 4 列在此處表示為 A1:

chr1    1734966 1735009 A1       0       0       0       0       0       1       0
chr1    2074087 2083457 A1       0       1       0       0       0       0       0
chr1    2788495 2788535 A1       0       0       0       0       0       0       0
chr1    2821745 2822495 A1       0       0       0       0       0       1       0
chr1    2821939 2822679 A1       1       0       0       0       0       0       0
...

輸出文件,有 20 列,每列來自 20 個文件的第 4 列之一:

A1       A2       A3       ...       A20
A1       A2       A3       ...       A20
A1       A2       A3       ...       A20
A1       A2       A3       ...       A20
A1       A2       A3       ...       A20
...

pastebash 下,您可以執行以下操作:

paste <(cut -f 4 1.txt) <(cut -f 4 2.txt) .... <(cut -f 4 20.txt)

使用 python 腳本和任意數量的文件 ( python scriptname.py column_nr file1 file2 ... filen):

#! /usr/bin/env python

# invoke with column nr to extract as first parameter followed by
# filenames. The files should all have the same number of rows

import sys

col = int(sys.argv[1])
res = {}

for file_name in sys.argv[2:]:
   for line_nr, line in enumerate(open(file_name)):
       res.setdefault(line_nr, []).append(line.strip().split('\t')[col-1])

for line_nr in sorted(res):
   print '\t'.join(res[line_nr])

引用自:https://unix.stackexchange.com/questions/158408