Saya memiliki beberapa file seperti: (pada kenyataannya saya memiliki 80)
file1.dat
2 5
6 9
7 1
file2.dat
3 7
8 4
1 3
Saya ingin mengakhiri dengan file yang berisi semua baris kedua. yaitu
output.dat
6 9
8 4
Apa yang saya miliki sejauh loop meskipun nama file tetapi kemudian menulis file di atasnya. misalnya output dari file-file di atas hanya akan
8 4
skrip shell saya terlihat seperti ini:
post.sh
TEND = 80
TINDX = 0
while [ $TINDX - lt $TEND]; do
awk '{ print NR==2 "input-$TINDX.dat > output.dat
TINDX = $((TINDX+1))
done
awk 'FNR==2' file{1..80}.dat > output.dat
Bagaimana dengan ...
head -n 2 input.dat | tail -n 1 | awk
...sumber
head
/tail
pasti sebuah pilihan, Anda tidak perluawk
kemudian.sed
akan cukup:-s
opsi diperlukan untuk mencetak baris ke-2 dari setiap file, jika tidak hanya baris ke-2 dari file pertama yang akan dicetak.sumber
sed
solusi aragaer adalah yang terbaik, ya. Tapi saya karena saya menikmati sedikithead|tail
pemotongan, punyahead|tail
solusi yang mendukung banyak file, bukan hanya satuinput.dat
. Menggunakan for-loop, alih-alih meneruskan daftar file ke sed, juga membuatnya lebih mudah untuk melakukan hal lain dengan file sebelum / sesudah mengekstraksi baris kedua dengan sed.Versi multi-baris yang banyak dikomentari:
NB: kode di bawah ini akan berjalan. Kita bebas untuk menempatkan linebreak setelah
|
,&&
atau||
, dan melanjutkan perintah kami pada baris berikutnya; kami bahkan dapat memberikan komentar di antaranya. Saya menghabiskan waktu bertahun - tahun untuk tidak mengetahui hal ini (dan tidak benar-benar melihatnya di mana pun). Gaya ini kurang berguna pada prompt interaktif, tetapi membersihkan file skrip tanpa akhir.sumber
Jelas ada banyak cara untuk melakukan ini - saya pikir saya suka @ sed aragaer jawaban terbaik .
Inilah salah satu yang menggunakan murni bash builtins dan tidak perlu membayar utilitas eksternal apa pun:
sumber
Untuk efisiensi penggunaan
awk
dansed
jawaban di sini pada banyak file, lebih baik menggunakannextfile
pernyataan untuk melewati pemrosesan baris yang tidak diinginkanawk
.dan dengan
sed
, kita dapat keluar saat memproses atas 3 rd line dansed
akan memproses file selanjutnya.sumber