awk – 如何删除字段分隔符的第一列

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

87540221|1356438283301|1356438284971|1356438292151697 87540258|1356438283301|1356438284971|1356438292151697 87549647|1356438283301|1356438284971|1356438292151697 

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

有任何想法吗?

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

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

但它不起作用

Solutions Collecting From Web of "awk – 如何删除字段分隔符的第一列"

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 

假设您的原始CSV文件被命名为“orig.csv”:

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

管道是特殊的正则表达式的符号和子功能希望你传递一个正则表达式。 正确的awk命令应该是这样的:

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

OUTPUT:

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

sed

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

GNU awk

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

产量

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