10

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

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

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

有任何想法吗?

这是我迄今为止尝试过的

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

但它不起作用

4

5 回答 5

17

这很简单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 
于 2013-05-08T19:00:48.117 回答
7

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

awk -F'|' '{print $1 > "newfile"; sub(/^[^|]+\|/,"")}1' orig.csv > tmp && mv tmp orig.csv
于 2013-05-08T18:59:47.430 回答
2

GNU awk

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

输出

1356438283301|1356438284971|1356438292151697
1356438283301|1356438284971|1356438292151697
1356438283301|1356438284971|1356438292151697
于 2014-11-18T06:20:01.913 回答
1

管道是特殊的正则表达式符号,子函数希望您传递正则表达式。正确的 awk 命令应该是这样的:

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

输出:

1356438283301|1356438284971|1356438292151697
1356438283301|1356438284971|1356438292151697
1356438283301|1356438284971|1356438292151697
于 2013-05-08T19:00:57.247 回答
0

sed

sed 's/[^|]*|//' file.txt
于 2014-11-18T14:49:03.523 回答