簡體   English   中英

awk - 如何刪除帶有字段分隔符的第一列

[英]awk - how to delete first column with field separator

我有一個 csv 文件,其中的數據如下

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

我正在嘗試將第一列保存到一個新文件(沒有字段分隔符,然后從主 csv 文件中刪除第一列以及第一個字段分隔符。

有任何想法嗎?

這是我迄今為止嘗試過的

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

但它不起作用

這很簡單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

GNU awk

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

輸出

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

管道是特殊的正則表達式符號,子函數希望您傳遞正則表達式。 正確的 awk 命令應該是這樣的:

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

輸出:

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

使用sed

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM