شما هنوز به سیستم وارد نشده اید.

#1 2017-12-12 12:03:30

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 753

افزودن تب یا فاصلمه بین ستون های خروجی بش[حل شد]

خروجی زیر رو در نظر بگیرید:

 ❯ systemctl -t service --state=running                                                                                                    [10:55:57]
UNIT                          LOAD   ACTIVE SUB     DESCRIPTION                                
accounts-daemon.service       loaded active running Accounts Service                           
bluetooth.service             loaded active running Bluetooth service                          
colord.service                loaded active running Manage, Install and Generate Color Profiles
dbus.service                  loaded active running D-Bus System Message Bus                   
getty@tty1.service            loaded active running Getty on tty1                              
JetBrainsLicServerDVT.service loaded active running Keymaker!                                  
NetworkManager.service        loaded active running Network Manager                            
polipo.service                loaded active running Polipo Proxy Server                        
polkit.service                loaded active running Authorization Manager                      
rtkit-daemon.service          loaded active running RealtimeKit Scheduling Policy Service      
systemd-journald.service      loaded active running Journal Service                            
systemd-logind.service        loaded active running Login Service                              
systemd-networkd.service      loaded active running Network Service                            
systemd-timesyncd.service     loaded active running Network Time Synchronization               
systemd-udevd.service         loaded active running udev Kernel Device Manager                 
tor.service                   loaded active running Anonymizing Overlay Network                
udisks2.service               loaded active running Disk Manager                               
upower.service                loaded active running Daemon for power management                
user@1000.service             loaded active running User Manager for UID 1000                  
wpa_supplicant.service        loaded active running WPA supplicant                             

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

20 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

من دارم برنامه ای می نویسم که به تک تک سلول ها وستون های این خروجی نیاز داره و از طرفی فقط اون ستون ها رو میخوام. یعنی سطرهای پایینی به دردم نمیخورن.خوب واسه این کار یه پترن رجیکس بدین شکل تدارک دیدم:

(?<=\n\n)(.*)(?=\n\n)

حالا واسه اینکه بتونم عناصر اصلی ستون ها رو بکشم بیرون از پترن زیر استفاده کردم:

(\S*)(\s*)

الان مشکل من این هست که بین ستون هام یک تک اسپیس هست در صورتی که اطلاعات ستون های آخر هم ممکنه توشون اسپیس باشه و نشه اینا رو از هم تمیز داد. اگه بشه به نحوی خروجی ای که دریافت میکنم بین ستون هاش یه اسپیس (یا تب) بیشتر بندازم، میشه کلمات اسپیس دار رو به عنوان یه واحد مجزا درنظر گرفت و استخراجشون کرد .از دستوراتی شبیه:

systemctl -t service --state=running | column -t 

هم برای فاصله انداختن بین ستون های خروجی بش استفاده کردم که کلا بین هر کلمه اسپیس داری یه تب میندازه و خروجی مد نظر منو تولید میکنه.
دوستان.any idea?

آخرین ویرایش توسط LinArcX (2017-12-12 23:17:37)

آفلاین

#2 2017-12-12 12:56:07

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,338

پاسخ: افزودن تب یا فاصلمه بین ستون های خروجی بش[حل شد]

درود بر سعید عزیز. اگر فرض کنیم ستونها را استخراج کردید (که در مثال ما تا ۴ ستون اول توسط awk به صورت دلخواه ما خونده میشه و بعد ازون بخاطر اینکه فاصله ها قرار هست نقش جدا کردن کلمات را داشته باشن طبق میل ما پیش نخواهد رفت) کافیه از چیزی مثل این استفاده کنیم:

$ awk '{ print $1"\t"$2"\t"$3"\t"$4"\t\t\t"$5}' F1 > F2

که من خواستم بین ستونهای اول تا چهارم یک تب و بین ستون چهارم و پنجم "مثلن" سه تا تب بذاره.

آفلاین

#3 2017-12-12 13:46:50

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 753

پاسخ: افزودن تب یا فاصلمه بین ستون های خروجی بش[حل شد]

درود عیسی جان:

 ❯ systemctl -t service --state=running | awk '{ print $1"\t"$2"\t"$3"\t"$4"\t\t\t"$5}'                                                    [12:45:49]
UNIT    LOAD    ACTIVE  SUB                     DESCRIPTION
accounts-daemon.service loaded  active  running                 Accounts
bluetooth.service       loaded  active  running                 Bluetooth
colord.service  loaded  active  running                 Manage,
dbus.service    loaded  active  running                 D-Bus
getty@tty1.service      loaded  active  running                 Getty
JetBrainsLicServerDVT.service   loaded  active  running                 Keymaker!
NetworkManager.service  loaded  active  running                 Network
polipo.service  loaded  active  running                 Polipo
polkit.service  loaded  active  running                 Authorization
rtkit-daemon.service    loaded  active  running                 RealtimeKit
systemd-journald.service        loaded  active  running                 Journal
systemd-logind.service  loaded  active  running                 Login
systemd-networkd.service        loaded  active  running                 Network
systemd-timesyncd.service       loaded  active  running                 Network
systemd-udevd.service   loaded  active  running                 udev
tor.service     loaded  active  running                 Anonymizing
udisks2.service loaded  active  running                 Disk
upower.service  loaded  active  running                 Daemon
user@1000.service       loaded  active  running                 User
wpa_supplicant.service  loaded  active  running                 WPA

LOAD    =       Reflects        whether                 the
ACTIVE  =       The     high-level                      unit
SUB     =       The     low-level                       unit

20      loaded  units   listed.                 Pass
To      show    all     installed                       unit

از ستون پنجم به بعد(که مشخص هم نیست ستون آخر چند کلمه ای ممکنه باشه) رو تشخیص نمیده.
پ.ن: البته میشه یه کار بهتر کرد به نظرم. الان ستون پنجم دردسر ساز هست فقط. اگه بشه بین کلماتش "ـ" یا "." گذاشت همه چی حله. نیازی به تب بین ستون ها هم نیست.

آخرین ویرایش توسط LinArcX (2017-12-12 13:56:19)

آفلاین

#4 2017-12-12 13:56:03

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,338

پاسخ: افزودن تب یا فاصلمه بین ستون های خروجی بش[حل شد]

پوزش. اشتباه من بود (ما داریم بهش میگیم که تا ستون پنجم را پرینت کنه [که یعنی تا اولین کلمهٔ ستون پنجم برای ما]). این را بزنیم:
...

آخرین ویرایش توسط Arcush (2017-12-12 13:58:11)

آفلاین

#5 2017-12-12 13:59:34

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 753

پاسخ: افزودن تب یا فاصلمه بین ستون های خروجی بش[حل شد]

 ❯ systemctl -t service --state=running | awk '{ print $1"\t"$2"\t"$3"\t"$4"\t\t\t"$5; print $0}'                                          [12:56:48]
UNIT    LOAD    ACTIVE  SUB                     DESCRIPTION
UNIT                          LOAD   ACTIVE SUB     DESCRIPTION
accounts-daemon.service loaded  active  running                 Accounts
accounts-daemon.service       loaded active running Accounts Service
bluetooth.service       loaded  active  running                 Bluetooth
bluetooth.service             loaded active running Bluetooth service
colord.service  loaded  active  running                 Manage,
colord.service                loaded active running Manage, Install and Generate Color Profiles
dbus.service    loaded  active  running                 D-Bus
dbus.service                  loaded active running D-Bus System Message Bus
getty@tty1.service      loaded  active  running                 Getty
getty@tty1.service            loaded active running Getty on tty1
JetBrainsLicServerDVT.service   loaded  active  running                 Keymaker!
JetBrainsLicServerDVT.service loaded active running Keymaker!
NetworkManager.service  loaded  active  running                 Network
NetworkManager.service        loaded active running Network Manager
polipo.service  loaded  active  running                 Polipo
polipo.service                loaded active running Polipo Proxy Server
polkit.service  loaded  active  running                 Authorization
polkit.service                loaded active running Authorization Manager
rtkit-daemon.service    loaded  active  running                 RealtimeKit
rtkit-daemon.service          loaded active running RealtimeKit Scheduling Policy Service
systemd-journald.service        loaded  active  running                 Journal
systemd-journald.service      loaded active running Journal Service
systemd-logind.service  loaded  active  running                 Login
systemd-logind.service        loaded active running Login Service
systemd-networkd.service        loaded  active  running                 Network
systemd-networkd.service      loaded active running Network Service
systemd-timesyncd.service       loaded  active  running                 Network
systemd-timesyncd.service     loaded active running Network Time Synchronization
systemd-udevd.service   loaded  active  running                 udev
systemd-udevd.service         loaded active running udev Kernel Device Manager
tor.service     loaded  active  running                 Anonymizing
tor.service                   loaded active running Anonymizing Overlay Network
udisks2.service loaded  active  running                 Disk
udisks2.service               loaded active running Disk Manager
upower.service  loaded  active  running                 Daemon
upower.service                loaded active running Daemon for power management
user@1000.service       loaded  active  running                 User
user@1000.service             loaded active running User Manager for UID 1000
wpa_supplicant.service  loaded  active  running                 WPA
wpa_supplicant.service        loaded active running WPA supplicant


LOAD    =       Reflects        whether                 the
LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE  =       The     high-level                      unit
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB     =       The     low-level                       unit
SUB    = The low-level unit activation state, values depend on unit type.


20      loaded  units   listed.                 Pass
20 loaded units listed. Pass --all to see loaded but inactive units, too.
To      show    all     installed                       unit
To show all installed unit files use 'systemctl list-unit-files'.

نظرت راجع به پی نوشت چی هست عیسی جان؟ تر و تمیز تر نیست اون کار؟

آفلاین

#6 2017-12-12 14:50:04

Arcush
Moderator
ثبت شده: 2015-09-15
ارسال ها: 1,338

پاسخ: افزودن تب یا فاصلمه بین ستون های خروجی بش[حل شد]

موافق ام. این هردوی انتظارات ما را برآورده می کنه:

$ awk -v ORS= '{print $1"\t"$2"\t"$3"\t"$4"\t"$5; for(i=6;i<=NF;i++) print  (i%1?OFS:"_") $i; print "\n"}'

درمورد قبلی اشتباه از من بود. چون تا ستون ۵ را پرینت می کردیم.

آفلاین

#7 2017-12-12 23:17:12

LinArcX
عضو
ثبت شده: 2015-09-18
ارسال ها: 753

پاسخ: افزودن تب یا فاصلمه بین ستون های خروجی بش[حل شد]

خواهش میکنم. عالی بود آقا. دقیقا همون چیزی بود که میخواستم.

آفلاین

پانوشت انجمن

پشتیبانی توسط تیم آرچ لینوکس ایران و نیرو گرفته با FluxBB