Bagaimana saya bisa menggunakan alat pemrosesan teks untuk menyisipkan baris baru setelah setiap baris N?
Contoh untuk N = 2:
MEMASUKKAN:
sadf
asdf
yxcv
cxv
eqrt
asdf
KELUARAN:
sadf
asdf
yxcv
cxv
eqrt
asdf
Bagaimana saya bisa menggunakan alat pemrosesan teks untuk menyisipkan baris baru setelah setiap baris N?
Contoh untuk N = 2:
MEMASUKKAN:
sadf
asdf
yxcv
cxv
eqrt
asdf
KELUARAN:
sadf
asdf
yxcv
cxv
eqrt
asdf
Jawaban:
Dengan awk:
awk ' {print;} NR % 2 == 0 { print ""; }' inputfile
Dengan sed( GNUekstensi):
sed '0~2 a\\' inputfile
Dengan bash:
#!/bin/bash
lines=0
while IFS= read -r line
do
printf '%s\n' "${line}"
((lines++ % 2)) && echo
done < "$1"
sed '0~2 a\ 'menambah ruang untuk setiap baris yang dimasukkan. Jika Anda ingin menambahkan baris baru setelah setiap baris, semua ini sama kerja: sed '0~1 a\ ', sed 'a\ ', atau hanya sed G.
sed n\;G <infile
... semua yang kamu butuhkan ...
Sebagai contoh:
seq 6 | sed n\;G
1
2
3
4
5
6
... (dan kosong juga mengikuti 6) ... atau ...
seq 5 | sed n\;G
1
2
3
4
5
(dan tidak ada yang kosong mengikuti 5)
Jika kosong harus selalu dihilangkan dalam kasus baris terakhir:
sed 'n;$!G' <infile
Rasa awk lainnya:
awk '{ l=$0; getline; printf("%s\n%s\n\n", l, $0) }'
Dengan (GNU) sed:
sed '0~2G'
Pendek (jelek untuk N = 100):
sed 'n;G'
man sed menjelaskan ~ sebagai:
first ~ step
Cocokkan setiap baris step'th dimulai dengan baris pertama. Sebagai contoh, `` sed -n 1 ~ 2p '' akan mencetak semua baris bernomor ganjil dalam aliran input, dan alamat 2 ~ 5 akan cocok dengan setiap baris kelima, dimulai dengan yang kedua. pertama bisa nol; dalam hal ini, sed beroperasi seolah-olah sama dengan langkah. (Ini adalah ekstensi.)
Dengan sed lainnya (Hitung baris baru):
sed -e 'p;s/.*//;H;x;/\n\{2\}/{g;p};x;d'
Atau, agar lebih portabel, ditulis sebagai (hapus komentar untuk beberapa versi sed):
sed -e ' # Start a sed script.
p # Whatever happens later, print the line.
s/.*// # Clean the pattern space.
H # Add **one** newline to hold space.
x # Get the hold space to examine it, now is empty.
/\n\{2\}/{ # Test if there are 2 new lines counted.
g # Erase the newline count.
p # Print an additional new line.
} # End the test.
x # match the `x` done above.
d # don't print anything else. Re-start.
' # End sed script.
Dengan awk, mungkin:
awk '1 ; NR%2==0 {printf"\n"} '
[[ ]]untuk menguji:while read line; do echo "$line"; ((lines++ % 2)) && echo; done.