我有一个csv文件,数据如下所示
87540221|1356438283301|1356438284971|1356438292151697
87540258|1356438283301|1356438284971|1356438292151697
87549647|1356438283301|1356438284971|1356438292151697
我正在尝试将第一列保存到新文件(没有字段分隔符,然后从主csv文件中删除第一列以及第一个字段分隔符。
有什么想法吗?
这是我到目前为止所尝试的
awk 'BEGIN{FS=OFS="|"}{$1="";sub("|,"")}1'
但它不起作用
答案 0 :(得分:7)
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
答案 1 :(得分:5)
假设您的原始CSV文件名为“orig.csv”:
awk -F'|' '{print $1 > "newfile"; sub(/^[^|]+\|/,"")}1' orig.csv > tmp && mv tmp orig.csv
答案 2 :(得分:1)
管道是特殊的正则表达式符号,子函数希望您传递正则表达式。正确的awk命令应该是这样的:
awk 'BEGIN {FS=OFS="|"} {$1=""; sub(/\|/, "")}'1 file
<强>输出:强>
1356438283301|1356438284971|1356438292151697
1356438283301|1356438284971|1356438292151697
1356438283301|1356438284971|1356438292151697
答案 3 :(得分:0)
GNU awk
awk '{$1="";$0=$0;$1=$1}1' FPAT='[^|]+' OFS='|'
输出
1356438283301|1356438284971|1356438292151697
1356438283301|1356438284971|1356438292151697
1356438283301|1356438284971|1356438292151697
答案 4 :(得分:0)
使用sed
:
sed 's/[^|]*|//' file.txt