我想通过选择给定文件的部分列来创建和组织多个文件中的数据。我有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
- 使用
cut
和paste
确定-d
字段的分隔符, -f
选择要提取的列cut
并-
指示使用标准输入(即在后一种paste
情况下,来自管道)而不是文件。