Tolong sarankan bagaimana saya bisa membagi kolom yang dipisahkan dengan pembatas ~|~.(file: abc.dat)

a~|~1~|~x
b~|~1~|~y
c~|~2~|~z

Saya mencoba di bawah perintah awk tetapi mendapatkan output 0 count.

awk -F'~|~' '$2 == 1' ${file} | wc -l
1
R_Kalavadiya 12 Mei 2021, 15:49

2 jawaban

Jawaban Terbaik

Dengan sampel yang Anda tunjukkan, silakan coba mengikuti. Kita tidak perlu menggunakan perintah wc bersama dengan awk, itu bisa dilakukan di dalam awk itu sendiri.

awk -F'~\\|~' '$2 == 1{count++} END{print count}' "$file"

Penjelasan: Menyetel pemisah bidang sebagai ~|~(escaped | di sini). Kemudian memeriksa apakah bidang ke-2 adalah 1, tambahkan jumlah variabel dengan 1 lalu. Di blok END program ini cetak nilainya.

Untuk menyimpan nilai ke dalam variabel Shell gunakan seperti:

var=$(awk -F'~\\|~' '$2 == 1{count++} END{print count}' "$file")
3
RavinderSingh13 12 Mei 2021, 13:05

Anda juga dapat menggunakan ~[|]~ sebagai nilai FS, karena karakter pipa yang digunakan di dalam ekspresi braket selalu cocok dengan dirinya sendiri, karakter pipa:

counter=$(awk 'BEGIN{FS="~[|]~"} $2==1{cnt++} END{print cnt}' file)

Lihat demo awk online:

s='a~|~1~|~x
b~|~1~|~y
c~|~2~|~z'
counter=$(awk 'BEGIN{FS="~[|]~"} $2==1{cnt++} END{print cnt}' <<< "$s")
echo $counter
# => 2
0
Wiktor Stribiżew 12 Mei 2021, 16:56