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 に答える