Saya memiliki output.txt dari menjalankan skrip shell sebagai berikut:
abc.txt
errorstatus1
Fri Nov 11 02:00:09 2016
def.txt
errorstatus2.txt
Sat Nov 12 03:00:09 2016
File teks memiliki beberapa entri baris demi baris dengan cara yang sama. Saya ingin mencetak nilai-nilai ini ke dalam kolom: Nama file, Status, dan Stempel Waktu sebagai berikut:
Filename Status Timestamp
abc.txt errorstatus1 Fri Nov 11 02:00:09 2016
def.txt errorstatus2 Sat Nov 12 03:00:09 2016
command-line
bash
scripts
text-processing
linux09
sumber
sumber
abc.txt,errorstatus1,Fri Nov 11 02:00:09 2016
. Saya mengedit pertanyaan Anda untuk mencocokkan apa yang dikatakannya dengan contoh yang Anda berikan. Jangan ragu untuk mundur, tetapi harap dicatat bahwa Anda benar-benar perlu mengklarifikasi apa yang sebenarnya Anda inginkan - nilai kolom atau nilai yang dipisahkan komaJawaban:
Dengan
paste
:ini akan menampilkan konten file yang dipisahkan baris baru sebagai kolom, dan tiga kolom terpisah tab per baris.
Menambahkan tajuk:
Untuk membuat kolom output, ambil bantuan dari
column
:Contoh:
sumber
echo Filename,Status,Timestamp; paste -d ',' - - - <file.txt
Anda bisa menggunakan awk:
Output mungkin tidak secantik:
Anda dapat menggunakan
%s\t
sebagai gantinya untuk output yang dipisahkan-tab.NR % 3
adalah nol (dan salah) untuk setiap baris ketiga, jadi baris lainnya dicetak dengan spasi setelah mereka alih-alih baris baru.next
baru mulai iterasi berikutnya.1
, dengan baris baru setelahnya, karena tidak cocok dengan blok pertama.sumber
Ada juga
rs
(BSD r e s utilitas hape):Khususnya,
Begitu
atau (untuk menambahkan tajuk)
sumber
Untuk kelengkapan, Anda dapat melakukan ini
sed
juga dengan :1iFilename\tStatus\tTimestamp
menyisipkan baris header sebelum baris 1N;N
membaca dua baris lagi ke buffer pola, memberikan total 3 baris yang dipisahkan baris baruy/\n/\t/
mengganti semua baris baru dengan tab di buffer polaPerintah
i
,N
dany
sed didokumentasikan di sini .sumber
Selalu memungkinkan untuk memasak sesuatu untuk pemrosesan teks dengan AWK atau Perl, dan tentu saja Python, yang disediakan oleh jawaban ini.
Sebagai satu-liner:
Sebagai skrip multi-baris
Ide dasar di sini adalah untuk memberikan input skrip melalui stdin (menggunakan pengalihan shell
<
, meskipun pipa dapat digunakan juga). Skrip menggunakan tab untuk memisahkan bidang, meskipun spasi dapat digunakan juga untuk keluaran yang lebih "disetel".Output sampel menggunakan contoh input yang disediakan oleh OP:
sumber