我有这种文件,我正在寻找一种方法来仅获取最后两列并将它们打印为一行两两,有人可以给我一个想法吗!感谢输入:
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
-s
paste
TAB=\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