在linux中,有没有办法将以.out结尾的目录中的所有文件连接到一个文件中?如果最终输出文件将它们水平地彼此相邻而不是垂直输出,那将会更好。更进一步,是否可以只从每个文件中获取第6列(每列用空格分隔)。
我知道我一直在用PowerShell做这件事。想知道linux是否可以做到这一点?
我知道我可以使用
paste *.out > total.out
但是如何粘贴第6列,用空格分隔?
答案 0 :(得分:2)
将bash和awk与临时文件一起使用,以过滤每个*.out
文件的第六列。
#!/bin/bash
declare -a TEMPS
for name in *.out; do
TEMPS+=($(mktemp $name.XXXXXXXX))
awk '{ print $5 ;}' $name >${TEMPS[-1]}
done
paste -d ' ' "${TEMPS[@]}"
# Remove tmp files
rm "${TEMPS[@]}"
使用@daniel
中的示例文件输出6 18 30
12 24 36
答案 1 :(得分:0)
将此脚本另存为.sh文件,然后在您的目录中运行它。此方法使用sponge
,您可以使用sudo apt-get install moreutils
saveColumn6.sh
# Make total.out a blank file
rm total.out
> total.out
# Go through every file ending in '.out'
for i in *.out
do
# cut out field 6, append it to total.out, and rewrite the file.
cut -d ' ' -f6 $i | paste -d' ' total.out - | sponge total.out
done
以下是我用来测试它的输入文件。
in0.out
1 2 3 4 5 6
7 8 9 10 11 12
in1.out
13 14 15 16 17 18
19 20 21 22 23 24
in2.out
25 26 27 28 29 30
31 32 33 34 35 36
这是我收到的输出文件
total.out
6 18 30
12 24 36
请注意,这个新数据库中有一个领先的空间,我无法弄清楚如何摆脱它。
正如Nightcrawler所提到的,Linux不是相关组件。您正在寻找bash
,这是许多基于GNU / Linux的系统使用的命令行shell。