将多个文本文件中的列切割成新文件

时间:2014-09-28 05:31:12

标签: shell unix awk sed

我有三个文本文件,我想从每个文件中复制/剪切第3和第4列,然后将它们(彼此相邻)插入到新的文本文件中。

以下是其中一个文本文件的内容:

03Z 23:00 69.7F 20.9C
04Z 00:00 70.1F 21.2C
05Z 01:00 69.7F 20.9C
06Z 02:00 69.1F 20.6C
07Z 03:00 68.5F 20.3C
08Z 04:00 67.0F 19.4C
09Z 05:00 65.4F 18.6C
10Z 06:00 64.5F 18.1C
11Z 07:00 63.8F 17.7C
12Z 08:00 64.9F 18.3C
13Z 09:00 68.6F 20.3C
14Z 10:00 72.7F 22.6C
15Z 11:00 75.6F 24.2C
16Z 12:00 78.3F 25.7C
17Z 13:00 79.4F 26.4C
18Z 14:00 79.9F 26.6C

我猜测sedawk是实现这一目标的好方法吗?

2 个答案:

答案 0 :(得分:1)

这将收集连接在一起的所有第3和第4列:

awk '{print $3,$4}' file1 file2 file3

如果您希望第二个文件的第3列和第4列以及第三个文件成为输出的第3至第6列,那么您需要bash中的一点点爱好者:

paste <(awk 'BEGIN {OFS="\t"} {print $3,$4}' file1) \
    <(awk 'BEGIN {OFS="\t"} {print $3,$4}' file2) \
    <(awk 'BEGIN {OFS="\t"} {print $3,$4}' file3)

或者,您可以单独处理每个文件,然后在最后paste将它们放在一起。

for f in file1 file2 file3
do
    awk 'BEGIN {OFS="\t"} {print $3,$4}' $f > $f.tmp
done
paste file1.tmp file2.tmp file3.tmp

答案 1 :(得分:0)

在这种情况下,您可以使用更合适的剪切:

cut -d" " -f3,4 file1 file2 file3 > result.txt

注意:如果列由制表符分隔,则可以删除-d" ",因为制表符是剪切的默认分隔符。

注意2:如果文件名确实已编号,您可以使用[1-3][a-c]等:

cut -d" " -f3,4 file[1-3] > result.txt