Linux从CSV文件中获取字段的命令



在Linux服务器上的csv文件中,我有数千行以下csv格式

0,20221208195546466,9,200,Above as:2|RAN34f2fb:HAER:0|RAND8365b2bca763:FON:0|RANDa7a5f964900b:ION:0|

我需要从以下格式的所有文件中获得输出(第二个字段即20221208195546466和第五个字段,但在Above as:之后和第一个之前的值在上面的例子中| ie 2)

输出:

20221208195546466 , 2

有谁能帮我一下linux命令吗?

编辑:

我尝试我试过,但它给字段第5个值。如何添加字段2以及?

cat *.csv | cut -d, -f5|cut -d'|' -f1|cut -d':' -f2|

编辑:排序结果

现在我使用这个命令(基于Dave Pritlove的回答)awk -F'[,|:]' '{print $2", "$6}' file.csv。但是,我还有一个查询,如果我必须根据$6(在您的示例中值2)对输出进行排序,那么我该如何做呢?我想要的结果应该显示在排序的顺序基于第二个输出字段。例如:

20221208195546366, 20

20221208195546436, 165

20221208195546466,

2022120819536466, 2

Gnu awk允许设置多个字段分隔符,允许您同时在,,|:分隔每个记录。因此,下面将从file.csv中找出所需的字段:

awk -F'[,|:]' '{print $2", "$6}' file.csv

在单记录示例上测试:

echo "0,20221208195546466,9,200,Above as:2|RAN34f2fb:HAER:0|RAND8365b2bca763:FON:0|RANDa7a5f964900b:ION:0|" | awk -F'[,|:]' '{print $2", "$6}'

输出:

20221208195546466, 2

假设:

  • 第5个以逗号分隔的字段的起始字符串可以每行不同(即,之前不知道)
  • 第5个逗号分隔字段中感兴趣的项出现在第一个:和第一个|之间

样本数据:

$ cat test.csv
0,20221208195546466,9,200,Above as:2|RAN34f2fb:HAER:0|RAND8365b2bca763:FON:0|RANDa7a5f964900b:ION:0|
1,20230124123456789,10,1730,Total ts:7|stuff:HAER:0|morestuff:FON:0|yetmorestuff:ION:0|

一个awk方法:

awk '
BEGIN { FS=OFS="," }                    # define input/output field delimiter as ","
{ split($5,a,"[:|]")              # split 5th field on dual delimiters ":" and "|", store results in array a[]
print $2,a[2]                   # print desired items to stdout
}
' test.csv

由此产生:

20221208195546466,2
20230124123456789,7

您可以使用awk:

awk -F',' '{gsub(/Above as:/,""); gsub(/|.*/, ""); print($2, $5)}'

可能需要采用一点regexp

您可以将:更改为,,|更改为,,然后使用cut按照以下方式提取第2和第6字段,让file.txt内容为

0,20221208195546466,9,200,Above as:2|RAN34f2fb:HAER:0|RAND8365b2bca763:FON:0|RANDa7a5f964900b:ION:0|

然后

tr ':|' ',,' < file.txt | cut --delimiter=',' --output-delimiter=' , ' --fields=2,6

给输出

20221208195546466 , 2

解释:tr翻译,即使用,替换:,使用,替换|,然后我通知cut,输入中的分隔符是,输出分隔符,包含在空格中(根据您所需的输出规定),并希望第2列和第6列(不是第5列,因为它现在是Above as)

(使用GNU coretils 8.30测试)

相关内容

  • 没有找到相关文章

最新更新