awk - 如何使用字段分隔符删除第一列

Dea*_*ano 5 linux shell awk

我有一个csv文件,其数据如下所示

87540221|1356438283301|1356438284971|1356438292151697
87540258|1356438283301|1356438284971|1356438292151697
87549647|1356438283301|1356438284971|1356438292151697
Run Code Online (Sandbox Code Playgroud)

我正在尝试将第一列保存到新文件(没有字段分隔符,然后从主csv文件中删除第一列以及第一个字段分隔符.

有任何想法吗?

这是我到目前为止所尝试的

awk 'BEGIN{FS=OFS="|"}{$1="";sub("|,"")}1'
Run Code Online (Sandbox Code Playgroud)

但它不起作用

Chr*_*our 10

这很简单cut:

$ cut -d'|' -f1 infile
87540221
87540258
87549647

$ cut -d'|' -f2- infile
1356438283301|1356438284971|1356438292151697
1356438283301|1356438284971|1356438292151697
1356438283301|1356438284971|1356438292151697
Run Code Online (Sandbox Code Playgroud)

只需重定向到您想要的文件:

$ cut -d'|' -f1 infile > outfile1

$ cut -d'|' -f2- infile > outfile2 && mv outfile2 file 
Run Code Online (Sandbox Code Playgroud)


Ed *_*ton 6

假设您的原始CSV文件名为"orig.csv":

awk -F'|' '{print $1 > "newfile"; sub(/^[^|]+\|/,"")}1' orig.csv > tmp && mv tmp orig.csv
Run Code Online (Sandbox Code Playgroud)

  • awk解决方案的工作速度比cut快20倍。在15Gb CSV文件上测试。 (2认同)
  • 我从没想过会这样。谢谢(你的)信息。 (2认同)