将行打印为两列两列

将行打印为两列两列

我有这种文件,我正在寻找一种方法来仅获取最后两列并将它们打印为一行两两,有人可以给我一个想法吗!感谢输入:

  1     0.00     435.9     6.04
  2     6.04     691.7    27.61
  3    33.65     964.5    10.03
  4    43.68    1932.5

输出

435.9 6.04     691.7 27.61     964.5 10.03    1932.5

答案1

像这样的吗?

awk '{printf ("%s %s\t", $3, $4)}' file

或者也许像这样处理丢失的字段

awk '{field3=$3; field4=$4} $3==""{field3="\t"} $4==""{field4="\t"} {printf ("%s %s\t", field3, field4)}' file

答案2

使用管道,我们打印第三个和第四个字段,用一个空格分隔,然后通过的选项awk-paste将它们全部扔到一行上 ,每对由 的默认分隔符分隔。paste-spasteTAB=\t

$ awk '{print $3, $4}' file | paste -s -

如果我们想留在 内awk,那也是可能的:

$ awk '
    BEGIN { s[1] = "\t"; ORS = "" }
    { print s[(NR>1)] $3, $4 }
    END { print RS }
' file

我们也可以做一些cut-paste工作,但在此之前必须进行一个小的编辑,即,将所有空白转换为空格,压缩多个空格,并去除前导空格(如果有)。这是因为cut需要单个字符作为分隔符,并且 cut 不会忽略前导分隔符。

$ < file sed -Ee 's/\s+/ /g;s/^ //' |
    cut -d' ' -f3,4 | paste -s -

答案3

Python

#!/usr/bin/python
import re
m=re.compile(r'\s{1,}')
t=[]
k=open('file.txt','r')
for i in k:
    j=re.sub(m," ",i)
    try:
        o=j.strip().split(' ')
        if (len(o) == 4):
            y="{0} {1}".format(o[2],o[3])
        elif (len(o) == 3):
            y="{0}".format(o[2])
        else:
            print "Number of columns is less than 3"
        t.append(y)

    except:
        pass

print "\t".join(t)

输出

 python test.py 
435.9 6.04  691.7 27.61 964.5 10.03 1932.5
praveen@praveen:~

$

awk 命令

awk '{print $3,$4}' filename| perl -pne "s/\n/\t/g"

435.9 6.04 691.7 27.61 964.5 10.03 1932.5

相关内容