awk 打开管道分隔值文件,其中数据位于单列中,而不是三列中

awk 打开管道分隔值文件,其中数据位于单列中,而不是三列中

我有一个PSV文件 test1.psv 包含如下三列数据,打开时为awk,在单列中显示数据。

xxxx|0001|rose  
yyyy|8768|lotus  
fgsh|6543|lilly  

实际上这应该是“|”具有 3 列的分隔文件,但是当我 时print $1,所有列都作为第一列,如下所示

cat test1.psv |awk '{print $1}'

输出:

xxxx|0001|rose
yyyy|8768|lotus
fgsh|6543|lilly

但结果应该是:

xxxx
yyyy
fgsh

如果我们print $2,结果应该是:

0001
8768
6543

答案1

您必须|-F这样设置字段分隔符(而且,您不需要cat):

$ awk -F '|' '{print $1}' test1.csv
xxxx
yyyy
fgsh
$ awk -F '|' '{print $2}' test1.csv
0001
8768
6543
$ awk -F '|' '{print $3}' test1.csv
rose
lotus
lillyw

(请注意,$这里有一个命令行提示符 用于指示新行的开始,而不是命令的一部分)。

-F指定为POSIX并且应该是便携式的。

答案2

awk将假设文件是​​由制表符分隔的或由一个或多个空格组成的字符串,因此要使用管道分隔值文件,我们告诉 awk 我们的字段由竖线字符 | 分隔。 。

从上面句子中的第一个链接:

(字段分隔符)的值可以在 awk 程序中使用赋值运算符“=”进行更改(请参阅赋值表达式部分)。通常,执行此操作的正确时间是在处理任何输入之前执行开始时,以便使用正确的分隔符读取第一个记录。为此,请使用特殊的 BEGIN 模式(请参阅 BEGIN 和 END 特殊模式部分)。

例如,这里我们设置(字段分隔符,又名FS) 到字符串“|”:

cat test1.psv | awk 'BEGIN { FS = "|" } ; { print $1 }'

答案3

要仅返回分隔文件的特定列,请执行以下命令

cut -d'|' -f1 test1.csv

返回字段 1 ...将上面更改为 -f2 以返回第二列...-d parm 在本例中定义分隔符“|”

创建一个由使用管道 | 连接在一起的许多命令组成的管道是很常见的。所以上面也可以写成

cat test1.csv | cut -d'|' -f1

答案4

awk -F "|" '{print $1}' p.txt ===============> To get first column

awk -F "|" '{print $2}' p.txt===================> To get second column




python

Below python code drives first and second column

#!/usr/bin/python

k=open('p.txt','r')
for i in k:
    print " ".join(i.split("|")[0:2])

相关内容