Sebagian besar solusi dengan awk menyisakan ruang. Opsi di sini menghindari masalah itu.
Pilihan 1
Solusi pemotongan sederhana (hanya bekerja dengan pembatas tunggal):
command | cut -d' ' -f3-
pilihan 2
Memaksa re-cal awk kadang-kadang menghapus ruang pimpinan tambahan (OFS) yang tersisa dengan menghapus kolom pertama (berfungsi dengan beberapa versi awk):
command | awk '{ $1=$2="";$0=$0;} NF=NF'
Opsi 3
Mencetak setiap bidang yang diformat dengan printf
akan memberikan kontrol lebih besar:
$ in=' 1 2 3 4 5 6 7 8 '
$ echo "$in"|awk -v n=2 '{ for(i=n+1;i<=NF;i++) printf("%s%s",$i,i==NF?RS:OFS);}'
3 4 5 6 7 8
Namun, semua jawaban sebelumnya mengubah semua FS berulang antara bidang menjadi OFS. Mari kita membangun beberapa opsi yang tidak melakukannya.
Opsi 4 (disarankan)
Lingkaran dengan sub untuk menghapus bidang dan pembatas di bagian depan.
Dan menggunakan nilai FS bukan ruang (yang bisa diubah).
Lebih portabel, dan tidak memicu perubahan FS ke OFS:
CATATAN: The ^[FS]*
adalah menerima masukan dengan spasi terkemuka.
$ in=' 1 2 3 4 5 6 7 8 '
$ echo "$in" | awk '{ n=2; a="^["FS"]*[^"FS"]+["FS"]+";
for(i=1;i<=n;i++) sub( a , "" , $0 ) } 1 '
3 4 5 6 7 8
Opsi 5
Sangat mungkin untuk membangun solusi yang tidak menambahkan spasi putih tambahan (memimpin atau mengikuti), dan melestarikan spasi putih yang ada menggunakan fungsi gensub
dari GNU awk, karena ini:
$ echo ' 1 2 3 4 5 6 7 8 ' |
awk -v n=2 'BEGIN{ a="^["FS"]*"; b="([^"FS"]+["FS"]+)"; c="{"n"}"; }
{ print(gensub(a""b""c,"",1)); }'
3 4 5 6 7 8
Itu juga dapat digunakan untuk menukar sekelompok bidang yang diberi hitungan n
:
$ echo ' 1 2 3 4 5 6 7 8 ' |
awk -v n=2 'BEGIN{ a="^["FS"]*"; b="([^"FS"]+["FS"]+)"; c="{"n"}"; }
{
d=gensub(a""b""c,"",1);
e=gensub("^(.*)"d,"\\1",1,$0);
print("|"d"|","!"e"!");
}'
|3 4 5 6 7 8 | ! 1 2 !
Tentu saja, dalam kasus seperti itu, OFS digunakan untuk memisahkan kedua bagian dari garis, dan ruang putih trailing bidang masih dicetak.
CATATAN: [FS]*
digunakan untuk memungkinkan spasi di baris input.
grep | awk
ini adalah antipattern - Anda inginkanawk '/!/ { print $2 }'