如何从不同文件中选择、复制和粘贴某些列并从中创建一个文件?

如何从不同文件中选择、复制和粘贴某些列并从中创建一个文件?

我想通过选择给定文件的部分列来创建和组织多个文件中的数据。我有10多个文件,需要复制每个文件的第二、第三和第四列并将它们粘贴到一个文件中。

答案1

这也可以通过 轻松完成awk

$ awk '{print $2,$3,$4}' *.txt > collapsed_output.txt

例子

这是一些示例数据。

$ seq 20 | paste - - - - - > sample.txt

这些线条如下所示:

$ head sample.txt 
1   2   3   4   5
6   7   8   9   10
11  12  13  14  15
16  17  18  19  20

现在我们复制 10 份:

$ seq 10 | xargs -I{} cp sample.txt sample{}.txt

我们现在有以下文件:

$ tree
.
|-- sample10.txt
|-- sample1.txt
|-- sample2.txt
|-- sample3.txt
|-- sample4.txt
|-- sample5.txt
|-- sample6.txt
|-- sample7.txt
|-- sample8.txt
|-- sample9.txt
`-- sample.txt

现在如果我们运行我们的awk命令:

$ awk '{print $2, $3, $4}' sample{1..10}.txt | column -t
2   3   4
7   8   9
12  13  14
17  18  19
2   3   4
7   8   9
12  13  14
17  18  19
2   3   4
7   8   9
12  13  14
17  18  19
...

在这里,我向您展示前 3 个文件的输出 ( sample01.txt... sample03.txt)。另外,我使用命令格式化输出column -t,但这仅用于显示目的,以便更容易在 U&L 上查看输出。

附加格式可以在命令中轻松完成,awk但这似乎超出了问题的范围。

答案2

看看命令行实用程序名为cut。如果列由唯一的分隔符分隔,它可以提取列。重新组合您可以使用的部件paste

例如,如果您有典型的逗号分隔格式

$ cat debts.csv
Name,Age,Debt
Alice,20,1337
Bob,30,42

$ cat pets.csv
Name,Pet
Alice,Dog
Bob,Cat

你可以提取姓名和债务

$ cut -d, -f1,3 debts.csv
Name,Debt
Alice,1337
Bob,42

并将债务与宠物结合起来

$ cut -d, -f2 pets.csv | paste -d, debts.csv -
Name,Age,Debt,Pet
Alice,20,1337,Dog
Bob,30,42,Cat
  • 使用cutpaste确定 -d字段的分隔符,
  • -f选择要提取的列cut
  • -指示使用标准输入(即在后一种paste情况下,来自管道)而不是文件。

相关内容