Cara menghapus tiga kolom pertama dalam file yang dibatasi

Misalnya, saya punya file csv sebagai berikut,

12345432|1346283301|5676438284971|13564357342151697 ...
87540258|1356433301|1125438284971|135643643462151697 ...
67323266|1356563471|1823543828471|13564386436651697 ...

dan ratusan kolom lainnya tetapi saya ingin menghapus tiga kolom pertama dan menyimpannya ke file baru (jika memungkinkan file yang sama akan lebih baik untuk saya)

Inilah hasil yang saya inginkan.

13564357342151697 ...
135643643462151697 ...
13564386436651697 ...

Saya telah mencari dan mencoba tetapi saya tidak dapat melakukannya. Dan di bawah ini adalah kode yang saya miliki.

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

Hargai jika seseorang dapat membantu saya. Terima kasih.


awk
person Heng Unn    schedule 07.03.2017    source sumber
comment
Periksa stackoverflow.com/questions/ 2626274/   -  person Utsav    schedule 07.03.2017
comment
@Utsav Saya mencobanya tetapi semua data saya kacau. Apakah karena pembatas saya adalah | ?   -  person Heng Unn    schedule 07.03.2017


Jawaban (4)


@Heng: coba:

awk -F"|" '{for(i=4;i<=NF;i++){printf("%s%s",$i,i==NF?"":"|")};print ""}'  Input_file

ATAU

awk -F"|" '{for(i=4;i<=NF;i++){printf("%s%s",$i,i==NF?"\n":"|")};}'  Input_file

Anda dapat mengarahkan ulang keluaran perintah ini ke dalam file sesuai kebutuhan Anda.

EDIT:

awk -F"|" 'FNR==1{++e;fi="REPORT_A1_"e;} {for(i=4;i<=NF;i++){printf("%s%s",$i,i==NF?"\n":"|") > fi}}'   Input_file1  Input_file2  Input_file3
person RavinderSingh13    schedule 07.03.2017
comment
Terima kasih @RavinderSingh13! Pemotongan juga berhasil. Tahukah Anda apakah mungkin saya bisa menghapus tiga kolom pertama untuk 10 file sekaligus? Apakah saya perlu menggunakan loop dengan cut atau awk? - person Heng Unn; 07.03.2017
comment
Ya, dengan awk kami dapat melakukannya, tetapi kami perlu mengetahui kebutuhan Anda dan hasil yang diharapkan untuk lebih membantu Anda. silakan posting hal yang sama dengan detailnya. - person RavinderSingh13; 07.03.2017
comment
Saya ingin menyimpan hasilnya ke file csv. Jika saya melakukannya seperti yang Anda sarankan Input_file1 Input_file2 Input_file3 ............Input_file10, apakah itu berarti saya harus mengeluarkannya ke nama file yang terpisah juga? Karena semua 10 file saya memiliki nama yang mirip seperti REPORT_A1_1, REPORT_A1_2, REPORT_A1_3, ........REPORT_A1_10, jadi saya ingin tahu apakah saya dapat memiliki fungsi untuk memanggil 10 file ini untuk dibuang secara berurutan? - person Heng Unn; 07.03.2017
comment
Saya berkomentar di sini. @RavinderSingh13 - person Heng Unn; 07.03.2017
comment
silakan periksa hasil edit jawaban saya, Anda bisa menyukainya jika pertanyaan Anda terpecahkan juga :) - person RavinderSingh13; 07.03.2017
comment
Itu berhasil juga kawan. Kamu Menakjubkan. Terima kasih. Satu pertanyaan lagi, setelah menghapus tiga kolom pertama, apakah mungkin menggantinya dengan nama file asli dan melakukan hal yang sama untuk 10 file sekaligus? @RavinderSingh13 - person Heng Unn; 07.03.2017
comment
Saya tidak mengerti, Anda ingin memasukkan 10 output Input_files ke dalam satu Input_file yang sama? - person RavinderSingh13; 07.03.2017
comment
Jika kasusnya di atas, Anda cukup memasukkan output perintah ke temp_input_file dan kemudian mengganti namanya menjadi Input_file, beri tahu saya jika ini membantu. - person RavinderSingh13; 07.03.2017
comment
Tidak, bukan ini yang saya maksud. Izinkan saya memberi contoh, Misalnya REPORT_A1_1 telah dihapus untuk tiga kolom pertama bukan? Dan saya ingin datanya disimpan kembali ke nama file yang sama, REPORT_A1_1. Dan saya juga ingin melakukan ini untuk 10 file sekaligus, apakah mungkin? Mohon maaf atas informasi yang kurang jelas dan terima kasih juga telah bersabar. @RavinderSingh13 - person Heng Unn; 07.03.2017

Anda dapat menggunakan cut :

cut -f4- -d'|' old.csv  > new.csv
person Bertrand Martel    schedule 07.03.2017
comment
Lebih efisien dari awk. - person codeforester; 07.03.2017
comment
Terima kasih banyak. Tahukah kalian apakah mungkin saya bisa memotong tiga kolom pertama untuk 10 file sekaligus? Apakah saya perlu menggunakan loop? - person Heng Unn; 07.03.2017
comment
@HengUnn: Silakan posting contoh Input dan output yang diharapkan agar lebih jelas. - person RavinderSingh13; 07.03.2017
comment
@ RavinderSingh13 Contoh input dan output sama dengan yang saya posting di atas. Hanya saya punya 10 file yang semuanya harus saya hapus tiga kolom pertama juga. Saya ingin tahu apakah ada cara untuk melakukannya bersama-sama untuk 10 file? Jadi saya hanya perlu menghapus tiga kolom pertama untuk 10 file untuk satu kali saja. - person Heng Unn; 07.03.2017
comment
@HengUnn: coba saja dengan perintah awk saya di atas lalu Input_file1 Input_file2 Input_file3 ............Input_file10 dan beri tahu saya jika itu membantu Anda. - person RavinderSingh13; 07.03.2017

Inilah yang Anda cari:

awk -F '|' '{$1=$2=$3=""; print $0}' oldfile > newfile

Tapi itu akan memiliki spasi putih di depannya, jadi tambahkan substitusi berikut:

sub(/^[ \t\|]+/,"") --> diubah menjadi sub(/^[ \t\|]+/,"") (lolos dari awalan '|' dari penghapusan kolom)

awk -F '|' '{$1=$2=$3="";OFS="|";sub(/^[ \t\|]+/,"") ;print $0}' oldFile > newFile

person SVTAnthony    schedule 07.03.2017
comment
Terima kasih @SVTAnthony Saya mencoba dengan kode Anda tetapi keluaran saya kacau. Semua kolom dimasukkan ke dalam satu kolom. - person Heng Unn; 07.03.2017
comment
gunakan awk -i inplace -F '|' '{$1=$2=$3=""; gsub(/\s+/,"|");}1' data.txt - person Bertrand Martel; 07.03.2017
comment
Saya baru saja mengedit contoh agar sesuai dengan kebutuhan Anda. Yang saya lewatkan adalah Output Field Separator (OFS), saya juga melakukan pembersihan pada pemisah utama yang disebabkan oleh penghapusan kolom tersebut. Terima kasih telah memberi tahu saya. - person SVTAnthony; 07.03.2017
comment
Harus menyetel OFS sebelum menyetel $1=$2=$3="" -- sebaiknya di BEGIN atau baris perintah -vOFS='|' -- dan kemudian Anda hanya perlu sub(/^\|\|\|/,"") atau bahkan lebih sederhana print substr($0,4) - person dave_thompson_085; 09.03.2017

person    schedule
comment
Hai!, silakan baca stackoverflow.com/help/how-to-answer dan coba berikan penjelasan mengapa hal ini kode. Terima kasih! - person Eel Lee; 09.03.2017
comment
Meskipun cuplikan kode ini diterima, dan mungkin memberikan bantuan, akan sangat ditingkatkan jika menyertakan penjelasan tentang caranya dan mengapa ini menyelesaikan masalah. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa mendatang, bukan hanya untuk orang yang bertanya sekarang! Harap edit jawaban Anda untuk menambahkan penjelasan, dan berikan indikasi batasan dan asumsi apa yang berlaku. - person Toby Speight; 10.03.2017