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

Linux awk-如何使用字段分隔符删除第一列,linux,shell,awk,Linux,Shell,Awk,我有一个csv文件,数据如下 87540221|1356438283301|1356438284971|1356438292151697 87540258|1356438283301|1356438284971|1356438292151697 87549647|1356438283301|1356438284971|1356438292151697 我试图将第一列保存到一个新文件(不带字段分隔符),然后将第一列连同第一个字段分隔符一起从主csv文件中删除 有什么想法吗 这就是我迄今为止所尝试

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

87540221|1356438283301|1356438284971|1356438292151697
87540258|1356438283301|1356438284971|1356438292151697
87549647|1356438283301|1356438284971|1356438292151697
我试图将第一列保存到一个新文件(不带字段分隔符),然后将第一列连同第一个字段分隔符一起从主csv文件中删除

有什么想法吗

这就是我迄今为止所尝试的

awk 'BEGIN{FS=OFS="|"}{$1="";sub("|,"")}1'

但是,如果您的原始CSV文件名为“orig.CSV”,则它不起作用:


使用
cut
,这很简单:

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

$ cut -d'|' -f2- infile
1356438283301|1356438284971|1356438292151697
1356438283301|1356438284971|1356438292151697
1356438283301|1356438284971|1356438292151697
只需重定向到所需的文件:

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

$ cut -d'|' -f2- infile > outfile2 && mv outfile2 file 

管道是特殊的正则表达式符号,子函数期望您传递正则表达式。正确的awk命令如下:

awk 'BEGIN {FS=OFS="|"} {$1=""; sub(/\|/, "")}'1 file
输出:

1356438283301|1356438284971|1356438292151697
1356438283301|1356438284971|1356438292151697
1356438283301|1356438284971|1356438292151697
GNU awk

awk '{$1="";$0=$0;$1=$1}1' FPAT='[^|]+' OFS='|'
输出

1356438283301|1356438284971|1356438292151697
1356438283301|1356438284971|1356438292151697
1356438283301|1356438284971|1356438292151697

使用
sed

sed 's/[^|]*|//' file.txt

关于剪切呢?
cut-d'|'-f2-
awk解决方案的速度是
cut
的20倍。在15Gb CSV文件上进行测试。我从未预料到。感谢您提供的信息。
sed 's/[^|]*|//' file.txt